Enterprise Software Industry Signals

Companies developing software solutions that support large-scale business operations, including cloud computing, ERP, and IT service management.

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

Across 67 companies in Enterprise Software we detected 2545 areas, 422 services, 258 tools, and 242 standards — producing an aggregate signal score of 23825.

How to read this page: Impact Report is the narrative read-out for the industry. Companies lists the 67 organizations included in the aggregate. Capabilities are Naftiko agent workflows common to Enterprise Software — 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.

Enterprise Software Industry Technology Investment Report

Prepared by Naftiko May 2026

Executive Summary

The Enterprise Software industry presents the most comprehensive and highest-scoring technology investment landscape across all industries assessed, with 21 companies spanning platform infrastructure, productivity software, collaboration tools, CRM, and enterprise resource planning evaluated across all 11 layers. Cisco and Alphabet emerge as the co-leaders in this cohort — Cisco leading in cloud at 146 and security at 86, Alphabet leading in data at 149 and AI at 82 — while Adobe occupies a consistent second-or-third position across nearly every dimension, establishing itself as the most balanced performer in a field of specialists. The industry’s technology stack is anchored by Datadog, GitHub, New Relic, Salesforce, and YouTube on the services side, and Consul, Terraform, PowerShell, Elasticsearch, and React Native on the tools side — a universal adoption pattern that reflects the sector’s role as a producer and integrator of enterprise technology.

A notable structural feature of the Enterprise Software peer group is the presence of hyperscale platform companies — Alphabet, Amazon, Meta, and Apple — alongside traditional enterprise software vendors such as SAP, Workday, ADP, and Atlassian, creating a scoring environment where the investment scale of hyperscalers can compress the apparent differentiation among mid-market enterprise software specialists. The analysis reveals that Cisco’s consistent leadership across the widest range of categories — from AI and Cloud to CNCF and Event-Driven architecture — reflects its strategic transformation from a networking vendor to a full-stack enterprise technology platform. SAP and Dell Technologies represent the highest-performing traditional enterprise vendors, while Zoom, Atlassian, and Gusto represent emerging challengers with above-median scores in specific high-growth categories. The industry’s overall maturity level is the highest of any vertical assessed, making it both the benchmark for other industries and the arena in which technology differentiation is hardest to sustain.


Layer 1: Foundational Layer

The Foundational Layer captures core technology capabilities across artificial intelligence, cloud infrastructure, open-source engagement, programming languages, and software engineering practices, measuring the depth of enterprise software companies’ own internal digital foundations alongside their investment in building these capabilities into customer-facing products.

Artificial Intelligence — Top Company: Cisco (89)

Cisco leads the Enterprise Software cohort in AI investment at 89, followed by Adobe at 84, Alphabet at 82, SAP at 70, and Dell Technologies at 69 — a top five that reflects the integration of AI capabilities across networking, creative software, search and cloud, ERP, and hardware infrastructure. The gap between Cisco at 89 and the next cluster of companies reflects its aggressive AI integration across the full product portfolio, from AI-enhanced network management to AI-powered customer experience platforms. The universal adoption of Elasticsearch, React Native, and Terraform establishes a common AI infrastructure baseline, while Consul — the service mesh and configuration tool — signals that enterprise-grade microservices architecture is standard across the cohort. Companies in the lower half of the distribution, including Broadcom, Intuit, and Gusto, reflect more specialized or narrower technology footprints.

Cloud — Top Company: Cisco (146)

Cloud investment is the highest-scoring category in the Foundational Layer, with Cisco posting 146, Alphabet at 143, and Adobe at 140 in a remarkably compressed top three. SAP at 121 and Amazon at 97 complete the top five, with Amazon’s lower relative score reflecting the different way its cloud investment is manifest — AWS is itself the cloud infrastructure rather than a consumer of it, likely compressing its score in dimensions measured from an infrastructure adoption standpoint. The universally high cloud scores across the cohort reflect the enterprise software industry’s fundamental shift to cloud-delivered products and the associated need to operate at cloud-native scale. Dell Technologies’ score of 88 signals continued progress in its cloud transition beyond hardware.

Open-Source — Top Company: Cisco (57)

Open-source investment follows the same leadership hierarchy as AI and Cloud, with Cisco at 57, Adobe at 54, Alphabet at 53, Dell Technologies at 43, and SAP at 42. The depth of open-source engagement at the top of this cohort reflects enterprise software companies’ dual role as consumers of open-source infrastructure and contributors to the open-source ecosystem that underpins their products. Meta’s position in the broader cohort with meaningful open-source scores is consistent with its role in seeding major open-source AI projects. The universal adoption of Terraform, Elasticsearch, and Consul reflects the extent to which HashiCorp and Elastic tooling has penetrated the enterprise software operational baseline.

Languages — Top Company: Alphabet (50)

Languages scoring sees Alphabet take the lead at 50, with Adobe at 48, SAP at 45, Cisco at 44, and Amazon at 39 rounding out the top five. Alphabet’s language breadth leadership reflects its position as one of the most polyglot engineering organizations in the world — operating across Python, Go, Java, JavaScript, C++, and multiple domain-specific languages across its product portfolio. SAP’s strong languages score at 45 is notably above expectations for a traditional ERP vendor, suggesting the company has substantially broadened its engineering stack as part of its cloud transformation. TypeScript and PowerShell’s universal adoption reflects the JavaScript ecosystem’s dominance in enterprise web development alongside Windows-environment automation scripting.

Code — Top Company: Cisco (43)

Cisco leads Code adoption at 43, ahead of Dell Technologies at 41 and SAP at 40, with Adobe at 39 and Workday at 34. Cisco’s code investment leadership reflects its transformation into a software-centric company, with GitHub, SonarQube, and Elasticsearch forming the universal code quality and search infrastructure across the cohort. Workday’s appearance in the top five in Code — above hyperscalers including Alphabet and Amazon in this specific area — suggests a deep investment in engineering practices relative to its platform scale, consistent with its position as a cloud-native enterprise software company from inception.


Layer 2: Retrieval & Grounding

The Retrieval & Grounding layer evaluates how Enterprise Software companies build and manage the data infrastructure, databases, and specification frameworks required to power AI retrieval and grounding systems — capabilities that are directly relevant to these companies’ product offerings as well as their internal operations.

Data — Top Company: Alphabet (149)

Alphabet leads Data investment at 149, with Cisco at 126, Adobe at 121, SAP at 102, and Dell Technologies at 96. Alphabet’s data leadership reflects its foundational position in search, advertising analytics, and cloud data services — data infrastructure is core to its business model in a way that distinguishes it even within this technology-intensive cohort. The presence of Snowflake in the broader services ecosystem and Elasticsearch, PostgreSQL, and Consul in the universal tools stack reflects a data infrastructure baseline capable of supporting both OLTP and analytical workloads at enterprise scale. SAP’s score of 102 is particularly notable — it reflects the depth of data engineering embedded in SAP’s platform for enterprise customers, not just internal operations.

Databases — Top Company: Cisco (42)

Database investment is led by Cisco at 42, Alphabet at 39, and Adobe at 35, with SAP at 32 and Workday at 31. The broad cluster of strong scores — 14 of 21 companies likely exceed a score of 15 — reflects the Enterprise Software industry’s inherent need for robust database infrastructure to manage customer data, product telemetry, and internal operations at scale. Elasticsearch’s universal adoption confirms that full-text search and log analytics databases are baseline infrastructure for this industry segment.

Virtualization — Top Company: Alphabet (27)

Virtualization scores are led by Alphabet at 27, with Adobe at 25, Cisco at 25, Meta at 24, and SAP at 22. The near-tie between Adobe, Cisco, and Alphabet in virtualization reflects converging architectural strategies around container-based infrastructure rather than traditional VM-based virtualization. Meta’s strong virtualization score at 24 is consistent with the hyperscale infrastructure demands of its social media and metaverse platforms, which require sophisticated compute virtualization for cost and performance optimization at scale.

Specifications — Top Company: Alphabet (12)

Specifications adoption is led by Alphabet at 12, SAP at 11, and Adobe and Cisco tied at 10, with Zoom at 9. Alphabet and SAP’s co-leadership in specifications reflects their significant investment in API governance and contract-driven development — Alphabet through its extensive public API portfolio and SAP through its enterprise integration platform requirements. Zoom’s appearance in the top five in specifications is notable for a company of its relative scale, suggesting a deliberate investment in API ecosystem quality that supports its developer platform strategy.

Context Engineering — Top Company: No Data

Context engineering shows no measurable adoption across the 21 Enterprise Software companies surveyed — a finding that is particularly significant given that these are precisely the companies that are building the AI platforms and tools their enterprise customers will use. The absence of context engineering signals in this cohort suggests that even the most sophisticated software vendors have not yet standardized the practices and tooling around prompt engineering, context window management, and dynamic grounding that will define the next generation of AI application development. This represents one of the most significant capability gaps in the industry.


Layer 3: Customization & Adaptation

The Customization & Adaptation layer measures how Enterprise Software companies build the ML pipeline infrastructure required to train, version, and deploy customized AI models — capabilities that are directly embedded in the AI products and services these companies sell to enterprise customers.

Data Pipelines — Top Company: Alphabet (15)

Alphabet leads Data Pipelines at 15, followed by SAP at 12, and Adobe, Dell Technologies, and Cisco clustered at 11 and 10. The leadership of Alphabet and SAP in this area reflects their positions as hyperscale data infrastructure operators, where production ML pipelines are a business-critical operational requirement rather than an experimental capability. Apache DolphinScheduler’s presence in the universal toolset signals emerging standardization around workflow orchestration for data pipeline management across the cohort.

Model Registry & Versioning — Top Company: Adobe (22)

Adobe leads Model Registry & Versioning at 22, with Meta at 21 and Cisco at 20, and Alphabet tied with Cisco at 20, and Dell Technologies at 18. Adobe’s leadership in this area is consistent with its deep investment in AI-powered creative tools — maintaining and versioning the Firefly and Sensei models underlying its creative product suite requires mature model registry infrastructure. Meta’s position at second reflects its extensive model development program, including the LLaMA model family, which necessitates sophisticated versioning and deployment pipelines.

Multimodal Infrastructure — Top Company: Cisco (22)

Cisco leads Multimodal Infrastructure at 22, with Adobe at 21 and Dell Technologies at 19, followed by SAP and Zoom at 17. Cisco’s leadership reflects its investment in multi-modal collaboration infrastructure — combining video, audio, messaging, and data streams — that directly supports the development of multimodal AI applications. Adobe’s position at 21 reflects its creative media orientation, where multimodal AI is central to its product roadmap. Zoom’s appearance in the top five at 17 is consistent with its investment in AI-powered video and meeting intelligence features.

Domain Specialization — Top Company: Multiple (2)

Domain specialization scores are uniformly low across the cohort, with Apple, Adobe, Workday, Cisco, and Microsoft all scoring 2 — the maximum observed. The broad distribution of companies recording meaningful scores in this area, encompassing 5 of 21 companies, suggests that domain specialization in enterprise software AI is emerging across multiple product categories simultaneously rather than concentrated in a single leader. Apple’s presence at the top of domain specialization, despite its generally mid-table overall scores, reflects its vertical integration approach to on-device AI and industry-specific machine learning frameworks.


Layer 4: Efficiency & Specialization

The Efficiency & Specialization layer evaluates how Enterprise Software companies deploy automation, containerization, platform engineering, and operational technologies to optimize their software delivery pipelines — an area where enterprise software companies set the benchmark for every other industry.

Automation — Top Company: Cisco (67)

Cisco leads Automation at 67, with Adobe close behind at 66 and Dell Technologies at 60, followed by Alphabet at 55 and ADP at 50. ADP’s appearance in the top five in Automation at 50 — above Amazon, SAP, and Meta — is notable and reflects the deep investment in workflow automation that is central to payroll and HR process automation as a business model. The universal adoption of Terraform and PowerShell across all 21 companies confirms that infrastructure automation is thoroughly standardized across the industry, with score differentials reflecting application-level and business process automation depth rather than infrastructure tooling maturity.

Containers — Top Company: Cisco (39)

Container adoption is led by Cisco at 39, Alphabet at 34, and Adobe and SAP tied at 29, with Dell Technologies at 27. Docker and Kubernetes adoption across all 21 companies is a baseline expectation in this industry; the score differentials reflect the breadth of workloads containerized and the maturity of container orchestration operations. Cisco’s container leadership at 39 reflects its investment in Kubernetes-native networking and service mesh infrastructure that is core to its enterprise platform strategy.

Platform — Top Company: Cisco (43)

Platform engineering scores are led by Cisco at 43, Adobe at 42, and Dell Technologies and Zoom both at 40, with Alphabet at 39. Zoom’s tie with Dell Technologies at 40 — ahead of major enterprise platforms including SAP, Amazon, and Meta — reflects the maturity of Zoom’s developer platform and its investments in building an extensible ecosystem around its core meeting and collaboration products. Consul’s universal adoption as a service discovery and configuration tool is a direct indicator of the microservices platform architectures that underpin these scores.

Operations — Top Company: Cisco (75)

Operations investment shows the largest absolute scores in this layer, with Cisco at 75, Adobe at 73, Alphabet at 72, SAP at 71, and Dell Technologies at 64 forming a densely clustered top five. The compression of scores between first and fifth place — only an 11-point spread — reflects the operational maturity of the entire leading cluster and makes differentiation in this area particularly challenging. The presence of React Native, Elasticsearch, and Consul in the universal toolset provides the operational infrastructure baseline from which these scores are built.


Layer 5: Productivity

The Productivity layer measures Enterprise Software companies’ adoption of SaaS tools, code productivity platforms, and the breadth of third-party services that amplify developer and operational output — areas where enterprise software vendors themselves are both producers and consumers.

Software As A Service (SaaS) — Top Company: Adobe (4)

SaaS adoption scores are led by Adobe at 4, with Cisco, SAP, and Zoom each at 4 as well, and Gusto at 3. The appearance of Gusto — a mid-market HR and payroll platform — in the SaaS productivity top five alongside Adobe and Cisco signals that companies with a SaaS-native business model score differently from those with hybrid or hardware-originated revenue streams. The universally low absolute scores in this area suggest that SaaS tool adoption as measured here captures a specific category of productivity-oriented SaaS tools rather than the broader enterprise software market.

Code — Top Company: Cisco (43)

Code productivity scores replicate the Foundational Layer Code pattern, with Cisco leading at 43 and Dell Technologies at 41. The consistent replication of Code scores across both the Foundational and Productivity layers for the same companies confirms that software engineering investment is the defining differentiator across this industry, and that the companies with the strongest code practices maintain that advantage across multiple scoring dimensions.

Services — Top Company: Cisco (279)

Services breadth reaches its peak in the Enterprise Software industry, with Cisco posting 279, Alphabet at 274, Adobe at 271, Meta at 235, and SAP at 228 — all dramatically higher than the Energy or Entertainment verticals. The breadth of universal services adoption — Datadog, GitHub, New Relic, Salesforce, and YouTube — reflects the Enterprise Software industry’s position at the center of the services ecosystem, both as a customer of and partner to the major services platforms. The scale of services investment at the top of this cohort reflects full-stack digital operations that span engineering, marketing, customer success, and developer relations at enterprise scale.


Layer 6: Integration & Interoperability

The Integration & Interoperability layer evaluates how Enterprise Software companies build and manage APIs, event-driven architectures, integration patterns, open specifications, Apache ecosystem adoption, and CNCF-aligned infrastructure — the architectural patterns that define enterprise integration at scale.

API — Top Company: Adobe (25)

Adobe and Alphabet are tied at the top of API adoption at 25, with Cisco at 22, SAP at 21, and Atlassian at 19. Adobe’s co-leadership in APIs — unexpected for a creative software company — reflects the deep integration of the Creative Cloud and Experience Cloud ecosystems, where APIs are the primary interface between internal services, partner integrations, and customer automation workflows. Atlassian’s appearance in the top five at 19, ahead of Amazon, Meta, and Dell Technologies, reflects its developer-centric culture and its history of building extensible, API-first products in Jira, Confluence, and Bitbucket.

Integrations — Top Company: Alphabet (39)

Integrations investment is led by Alphabet at 39, Adobe at 36, Cisco at 35, Dell Technologies at 32, and Workday at 30. Workday’s position in the top five at 30 reflects the integration-centric nature of enterprise HCM and finance software — Workday products exist at the center of complex integration topologies connecting HR, payroll, ERP, and identity systems. The universal adoption of Consul as a service mesh tool is an important infrastructure enabler for the high integrations scores observed across the cohort.

Event-Driven — Top Company: Alphabet (31)

Event-driven architecture adoption is led by Alphabet at 31 and Cisco at 30 — with Adobe at 27, Meta at 21, and SAP at 18. The strength of Alphabet and Cisco in event-driven architectures reflects the scale of their streaming data requirements: Alphabet for advertising, search, and cloud telemetry, and Cisco for network event processing and real-time analytics. The broad adoption of Kafka-based tooling across the universal toolset confirms that event streaming has become a standard architectural pattern in enterprise software infrastructure.

Patterns — Top Company: Cisco (22)

Integration Patterns are led by Cisco at 22, Alphabet at 21, Workday at 18, and SAP at 18, with Adobe at 16. The leadership of Workday in integration patterns alongside Cisco and Alphabet is consistent with the architectural complexity of enterprise business systems that must integrate with legacy ERP, identity providers, and custom enterprise applications — pattern libraries are essential infrastructure for managing that complexity at scale.

Specifications — Top Company: Alphabet (12)

Specifications leadership replicates the Layer 2 pattern, with Alphabet at 12 and SAP at 11 — consistent with these companies’ roles as API platform operators with the largest ecosystems of developer-consumers. Adobe and Cisco tied at 10 and Zoom at 9 round out the top five. The moderate absolute scores across the cohort suggest that formal API specification adoption, while growing, has not yet become universal practice even among leading enterprise software vendors.

Apache — Top Company: Adobe (17)

Apache ecosystem adoption is led by Adobe at 17, Cisco at 16, and Alphabet at 16, with Dell Technologies at 11 and SAP at 10. Adobe’s Apache leadership may reflect its investment in Apache Spark for data processing and Apache Kafka for event streaming in its data pipeline infrastructure — both projects align closely with the data and analytics workloads at the core of the Experience Cloud platform.

CNCF — Top Company: Cisco (40)

CNCF adoption is led by Cisco at 40, SAP at 32, Adobe at 30, Meta at 29, and Alphabet at 29. Cisco’s CNCF leadership at 40 is the highest score in this category across all industries assessed and reflects its strategic investment in the cloud-native ecosystem — particularly through its acquisitions and integrations in service mesh, observability, and Kubernetes networking. SAP’s second-place score at 32 reflects the depth of its Kyma and BTP platform investments in cloud-native enterprise application infrastructure.


Layer 7: Statefulness

The Statefulness layer evaluates how Enterprise Software companies manage the persistent state of AI systems and data infrastructure — covering observability, governance, security, and data management — capabilities that are both competitive differentiators for these companies and the foundation of the products they sell.

Observability — Top Company: Cisco (48)

Observability investment is led by Cisco at 48, Alphabet at 47, SAP at 44, Adobe at 43, and Salesforce at 37. Salesforce’s appearance in the top five of Observability — at fifth place ahead of Dell Technologies and Meta — is notable, reflecting Salesforce’s investment in platform observability as a strategic capability for its cloud-based CRM and platform-as-a-service infrastructure. The universal adoption of Datadog and New Relic across all 21 companies establishes the observability service layer, while the score differentials reflect depth of custom instrumentation and the breadth of workloads under active monitoring.

Governance — Top Company: Alphabet (41)

Governance investment is led by Alphabet at 41, Cisco at 36, Dell Technologies at 28, and Meta and Amazon tied at 24. Alphabet’s governance leadership reflects its position as a company subject to the most extensive regulatory scrutiny of any enterprise software vendor — across antitrust, privacy, AI regulation, and content moderation — which drives investment in governance infrastructure that exceeds that of more narrowly focused enterprise software companies. Dell Technologies’ third-place position at 28 reflects its investment in data governance frameworks as part of its cloud and AI services portfolio.

Security — Top Company: Cisco (86)

Security investment shows the largest absolute scores in this layer and the widest differentiation, with Cisco leading at 86, Alphabet at 84, Adobe at 59, Dell Technologies at 57, and SAP at 54. Cisco’s security leadership at 86 — the highest security score in this layer across all companies and industries assessed — reflects its core identity as a network security company and its investment in the Cisco Security portfolio, including Talos, Duo, and Umbrella. The 27-point gap between Cisco and Adobe in third place reflects structural differentiation in security investment rather than incremental scoring differences.

Data — Top Company: Alphabet (149)

Data scores replicate those from Layer 2, confirming that Alphabet (149), Cisco (126), and Adobe (121) form the leading cluster in data investment. The persistence of this hierarchy across multiple layers reinforces the view that data infrastructure is the foundational capability from which all other advanced digital investments in this industry derive their value, and that the leaders have built durable data engineering advantages that are not easily replicated by mid-market challengers.


Layer 8: Measurement & Accountability

The Measurement & Accountability layer assesses how Enterprise Software companies instrument, evaluate, and track the performance and business value of their technology investments — an area where these companies set the standard for the rest of the market by both consuming and producing measurement infrastructure.

Testing & Quality — Top Company: Adobe (23)

Adobe leads Testing & Quality at 23, with Cisco at 21 and Alphabet at 13, followed by ADP and SAP at 12. Adobe’s leadership in testing and quality reflects the complexity of maintaining quality across its multi-product creative and marketing cloud suite — where regression testing, performance testing, and compatibility testing at scale require mature quality engineering infrastructure. ADP’s position in the top five at 12, ahead of much larger platform companies, reflects the zero-tolerance quality requirements of payroll processing software, where correctness is a regulatory and reputational imperative.

Observability — Top Company: Cisco (48)

Observability scores replicate Layer 7, with Cisco at 48 and Alphabet at 47 confirming consistent leadership. The stability of these scores across both the Statefulness and Measurement layers reflects that observability is deployed as both an operational control and a measurement discipline — a dual function that distinguishes mature observability practices from basic monitoring implementations.

Developer Experience — Top Company: Adobe (23)

Developer experience investment is led by Adobe at 23, Alphabet at 23, Cisco at 22, and Meta at 22, with SAP at 21 — an exceptionally compressed top five where only 2 points separate first from fifth. The uniformity of developer experience investment across the leading Enterprise Software companies reflects the competitive importance of engineering talent attraction and retention in a sector where developer productivity directly determines product velocity. Meta’s co-leadership in developer experience at 22, despite trailing in some other dimensions, is consistent with its investment in engineering culture and developer tooling infrastructure.

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

ROI and business metrics measurement is led by Cisco at 54, tied with Alphabet at 54, and Adobe at 52, followed by SAP at 47 and Dell Technologies at 46. The strength of ROI measurement at the top of the Enterprise Software cohort reflects these companies’ sophisticated investor relations and product analytics functions, where business metrics tracking is essential for managing large, complex product portfolios. The universal adoption of Datadog, New Relic, and GitHub across all 21 companies provides the infrastructure layer that enables sophisticated product and business metric tracking at scale.


Layer 9: Governance & Risk

The Governance & Risk layer evaluates Enterprise Software companies’ regulatory compliance posture, AI review processes, cybersecurity investments, governance frameworks, and privacy and data rights management — areas of increasing strategic importance as AI product deployment accelerates and regulatory scrutiny intensifies.

Regulatory Posture — Top Company: Cisco (12)

Cisco leads Regulatory Posture at 12, Alphabet at 11, and Adobe at 9, with Atlassian and Meta both at 9. Cisco’s regulatory posture leadership reflects its exposure to US federal government customers and the associated compliance requirements — FedRAMP, CMMC, and ITAR — that necessitate robust regulatory documentation and certification programs. Atlassian’s appearance in the top five is consistent with its strong compliance program, particularly relevant to its JIRA and Confluence products used in regulated industries including healthcare, financial services, and government.

AI Review & Approval — Top Company: Adobe (18)

AI review and approval processes are led by Adobe at 18 and Cisco at 18, with SAP at 15 and Zoom at 15, followed by Dell Technologies at 14. Adobe’s co-leadership in AI review reflects the maturity of its responsible AI program around the Firefly generative AI platform — where content authenticity, bias review, and copyright compliance are business-critical governance requirements. SAP’s strong position at 15 reflects its investment in the responsible AI practices required for enterprise-grade ERP and HR software where AI decisions directly affect customer operations and employee outcomes.

Security — Top Company: Cisco (86)

Security scores replicate the Layer 7 pattern, with Cisco’s 86 and Alphabet’s 84 representing the highest security investment scores across all layers and all industries in this assessment. The structural gap between Cisco and the rest of the cohort in security reflects the nature of Cisco’s core business — security is not an adjunct investment but a primary revenue stream and strategic identity for the company, making its security investment scores categorically different from those of software companies for which security is a product feature rather than a product line.

Governance — Top Company: Alphabet (41)

Governance scores replicate Layer 7, with Alphabet (41) and Cisco (36) maintaining their leadership positions. The persistence of Alphabet’s governance leadership across both the Statefulness and Governance & Risk layers confirms that its investment in governance infrastructure is structural rather than reactive, driven by ongoing regulatory engagement across multiple jurisdictions including the EU Digital Markets Act, the EU AI Act, and US regulatory proceedings.

Privacy & Data Rights — Top Company: Alphabet (6)

Privacy and data rights investment is led by Alphabet at 6, Amazon at 5, Adobe at 4, and Cisco at 4, with Atlassian at 3. The relatively low absolute scores — even among companies with substantial privacy programs — suggest that privacy-by-design practices and data rights management frameworks are not yet fully captured in the job posting and technology adoption signals that underlie this scoring. Atlassian’s presence in the top five at 3 is consistent with its focus on data residency and privacy compliance for enterprise customers operating in regulated markets.


Layer 10: Economics & Sustainability

The Economics & Sustainability layer evaluates how Enterprise Software companies manage the financial dimensions of AI investment — FinOps practices, provider strategy, ecosystem partnerships, talent design, and data center economics — dimensions increasingly critical as AI infrastructure costs scale with product adoption.

AI FinOps — Top Company: Multiple (7)

AI FinOps scores show an unusual pattern in which Adobe, ADP, Workday, Cisco, and Broadcom are all tied at 7 — the maximum observed score in this category across the cohort. The distribution of AI FinOps leadership across companies of very different sizes — from hyperscale platform operators to payroll-focused software companies — suggests that FinOps maturity in this industry is not primarily a function of scale, but rather a function of organizational discipline and cloud cost management culture. The tie at the top also suggests that the scoring signals in this area are relatively sparse, making differentiation difficult at current measurement resolution.

Provider Strategy — Top Company: Adobe (14)

Provider strategy is led by Adobe at 14, tied with Cisco at 14, and Zoom at 14, followed by SAP at 11 and Salesforce at 11. Adobe’s provider strategy leadership reflects its deliberate multi-cloud approach — deploying on AWS, Azure, and GCP — combined with a sophisticated vendor management capability that spans AI model providers, cloud infrastructure providers, and data services. Zoom’s co-leadership at 14 reflects its need to optimize cloud provider costs at scale as a video infrastructure platform, where provider strategy directly affects gross margins.

Partnerships & Ecosystem — Top Company: Cisco (20)

Partnerships and ecosystem investment is led by Cisco at 20, tied with Meta at 20 and Alphabet at 20, followed by Adobe at 16 and Atlassian at 16. The three-way tie at the top between Cisco, Meta, and Alphabet reflects the broad-based ecosystem development programs of three companies with very different partnership models — Cisco through its technology integrations and reseller partnerships, Meta through its developer platform and metaverse ecosystem, and Alphabet through its Google Cloud and Android partnership programs. Atlassian’s fifth-place position at 16 reflects the depth of its Marketplace partner ecosystem and its investment in partner-led growth as a core go-to-market motion.

Talent & Organizational Design — Top Company: Meta (18)

Talent and organizational design investment is led by Meta at 18, tied with Amazon at 18, followed by Adobe at 16, Workday at 16, and Gusto at 16. Meta’s leadership in talent and organizational design reflects its significant investment in AI research talent, engineering culture, and organizational structures for AI product development. Workday and Gusto’s positions in the top five reflect their differentiated approach to building people-first organizational cultures that serve as both product design inspiration and competitive differentiators in the HR software market.

Data Centers — Top Company: No Data

No measurable data center investment signals were captured across the 21 Enterprise Software companies assessed — consistent with the industry’s broad adoption of hyperscaler cloud infrastructure rather than proprietary data center construction. The exceptions among hyperscalers who build their own data centers — Amazon and Alphabet — are not reflected in the scoring signals used in this assessment.


Layer 11: Storytelling & Entertainment & Theater

The Storytelling & Entertainment & Theater layer evaluates strategic alignment, technology standardization, mergers and acquisitions activity, and experimental innovation — dimensions that capture how Enterprise Software companies are positioning and communicating their technology narrative.

Alignment — Top Company: Cisco (32)

Strategic alignment is led by Cisco at 32, SAP at 29, Adobe at 28, Alphabet at 26, and Zoom at 25. Cisco’s alignment leadership reflects the coherence and consistency of its enterprise platform messaging — the convergence of networking, security, collaboration, and AI infrastructure under a unified brand narrative. SAP’s second place at 29 reflects the company’s successful repositelling around RISE with SAP and its cloud ERP transformation narrative, which has given it one of the most consistent strategic messaging tracks in enterprise software over the assessment period.

Standardization — Top Company: SAP (12)

Standardization investment is led by SAP at 12, Alphabet at 12, Meta at 11, and Zoom at 11, with Adobe at 10. SAP’s co-leadership in standardization reflects its institutional role as an enterprise application standards body — driving standardization across business processes, data models, and integration protocols that affect thousands of enterprises globally. Alphabet’s co-leadership at 12 reflects its investments in web standards, AI benchmarking, and developer tooling standards through its open-source contributions and standards body participation.

Mergers & Acquisitions — Top Company: Cisco (21)

M&A activity in technology-related areas is led by Cisco at 21, tied with SAP at 21, and Adobe at 19, followed by Workday at 19 and Salesforce at 19. Cisco’s M&A leadership reflects its historically active acquisition strategy in networking, security, and collaboration — supplemented by more recent acquisitions in AI and cloud observability. Adobe’s position at 19 reflects its continued acquisition program following the Figma regulatory withdrawal, suggesting ongoing portfolio expansion in creative technology and digital experience management.

Experimentation & Prototyping — Top Company: No Data

No measurable experimentation and prototyping signals were captured across the Enterprise Software cohort — a counterintuitive finding for an industry that produces the tools used by other industries for experimentation. This absence likely reflects the structured, product-release-oriented nature of enterprise software innovation, where experimentation is embedded in product development cycles rather than visible in external-facing technology adoption signals.


Industry Strategic Assessment

The Enterprise Software industry stands apart from all other verticals as both the highest-scoring and the most internally differentiated technology investment landscape in the 2026 assessment. Cisco’s emergence as the overall leader across the widest range of dimensions — cloud at 146, security at 86, automation at 67, and CNCF at 40 — reflects a fundamental transformation from a networking infrastructure company to a full-stack enterprise technology platform that is more analogous to Alphabet or Amazon than to its traditional networking peer group. Adobe’s consistent second-or-third-place performance across every major category is the most underappreciated story in the peer group — the company has built technology investment depth that rivals the hyperscalers in multiple dimensions, reflecting the scale of its multi-cloud digital experience platform. SAP’s strong performance — particularly in cloud, data, operations, and CNCF — confirms that the company’s cloud transformation has progressed further than many observers recognize, and positions it as the most technically capable traditional enterprise software vendor in the cohort.

The most consequential structural finding in the Enterprise Software assessment is the absence of context engineering capability across all 21 companies despite the industry’s central role in building AI products for enterprise customers. Enterprise software companies are the primary channel through which AI capabilities reach end users in every other industry — if even the leading companies in this vertical have not yet standardized context engineering practices internally, the downstream impact on enterprise AI deployment maturity across all industries will be significant. The companies that first operationalize context engineering as a reproducible capability — standardizing prompt design, retrieval grounding, and context window management into their AI product development processes — will establish a durable product quality advantage that will be difficult for competitors relying on raw foundation model performance to overcome.

The competitive dynamics within the Enterprise Software industry are shifting toward a model where integration depth, observability maturity, and governance infrastructure are as important as product functionality. Cisco’s dominance in security (86), CNCF (40), and event-driven architecture (30) positions it as the platform of record for enterprise AI infrastructure management — a position that generates defensible competitive advantages as enterprise customers face growing complexity in managing hybrid AI workloads. Alphabet’s data leadership (149) and governance investment (41) position it as the intelligence substrate for enterprise AI applications at scale. The companies most at risk of strategic displacement — including mid-market specialists in the 20-50 score range across multiple dimensions — are those that have not yet built the data, observability, and integration capabilities required to participate in the AI platform consolidation that is already underway at the top of the market.

Companies — Total:67

  • Adobe
    A multinational software company known for its creative, document, and digital marketing solutions. Creator of...
  • ADP
    A leading provider of human capital management solutions including payroll, benefits, and workforce management. Serves...
  • Airtable
    A connected apps platform that combines the flexibility of a spreadsheet with the power of...
  • Akamai Technologies
    Akamai Technologies is a major US corporation and Fortune 1000 company. The Akamai Technologies API...
  • Alight
    Alight is a leading cloud-based human capital and technology services provider that powers confident health,...
  • Alphabet
    The parent company of Google and one of the world's most valuable corporations. Operates the...
  • Amazon
    The world's largest e-commerce and cloud computing company operating a vast online marketplace, Amazon Web...
  • Apple
    The world's most valuable technology company designing consumer electronics, software, and digital services. Creator of...
  • Atlassian
    An Australian enterprise software company providing collaboration and project management tools for software development teams....
  • Autodesk
    Autodesk is a global leader in design, engineering, and entertainment software, providing cloud-connected platform APIs...
  • Avalara
    Avalara provides cloud-based tax compliance automation for businesses of every size, with services covering sales...
  • Broadcom
    A global technology company designing, developing, and supplying semiconductor and infrastructure software solutions. A leader...
  • CACI International
    CACI International provides information technology, professional services, and managed solutions to U.S. federal government agencies...
  • Cadence Design Systems
    Cadence Design Systems is a multinational electronic design automation (EDA) software and hardware company. Cadence...
  • CDW
    CDW is a leading multi-brand provider of information technology solutions to business, government, education, and...
  • Ciena
    Ciena Corporation is a global networking equipment, software, and services vendor focused on optical and...
  • Cisco
    A multinational technology company and the global leader in networking equipment and telecommunications technology. Provides...
  • Cisco Systems
    Cisco Systems is a global technology company providing networking, security, collaboration, and cloud infrastructure products....
  • Cognizant Technology Solutions
    Cognizant Technology Solutions is a multinational information technology services and consulting company that provides digital,...
  • Dell Technologies
    A multinational technology company providing personal computers, servers, storage, and cloud infrastructure solutions. A leading...
  • Diebold Nixdorf
    Diebold Nixdorf is a global leader in driving connected commerce for the financial and retail...
  • Docusign
    DocuSign helps organizations connect and automate how they prepare, sign, act on, and manage agreements....
  • Dropbox
    Dropbox is a file hosting service operated by the American company Dropbox, Inc., headquartered in...
  • DXC Technology
    DXC Technology is a global IT services company that helps clients harness the power of...
  • Encore
    Encore is an open source development platform for building type-safe, production-ready backend applications and distributed...
  • Equinix
    Equinix is a global digital infrastructure company that provides interconnection and data center services to...
  • F5
    F5 is a global company that specializes in application delivery and security solutions for businesses....
  • Gravitee
    An open-source API management platform offering full lifecycle management for REST, async, event-driven, and AI/agentic...
  • Gusto
    A cloud-based payroll, benefits, and human resources platform designed for small and medium-sized businesses. Simplifies...
  • Hewlett Packard Enterprise
    Hewlett Packard Enterprise is a global edge-to-cloud company that provides solutions including servers, storage, networking,...
  • HubSpot
    An inbound marketing, sales, customer service, and operations software platform offering a unified CRM with...
  • IBM
    A multinational technology and consulting corporation providing cloud computing, artificial intelligence, and enterprise software solutions....
  • Insight Enterprises
    Insight Enterprises is a global Fortune 500 solutions integrator helping organizations transform technology, operations, and...
  • Intuit
    A financial software company providing tax preparation, accounting, and personal finance solutions. Creator of TurboTax,...
  • JMS
    Java Message Service (JMS), now known as Jakarta Messaging, is a Java API that allows...
  • Kyndryl Holdings
    Fortune 1000 company Kyndryl Holdings. Public API documentation has not yet been catalogued in the...
  • Leidos
    Leidos, a Fortune 500 digital and mission innovator, delivers solutions at the intersection of national...
  • Meta
    A technology conglomerate formerly known as Facebook, operating the world's largest social media platforms including...
  • Microsoft
    One of the world's most valuable technology companies producing software, cloud services, and hardware. Creator...
  • NCR
    NCR Corporation separated in October 2023 into two independent public companies: NCR Voyix, a global...
  • NetApp
    Collection of NetApp APIs for cloud data services, storage management, and infrastructure.
  • Okta
    An identity and access management platform providing workforce identity (Workforce Identity Cloud) and customer identity...
  • Oracle
    A multinational technology corporation and one of the world's largest enterprise software companies. Provides cloud...
  • Palo Alto Networks
    Palo Alto Networks is a global cybersecurity leader providing advanced security platforms and services across...
  • Pandium
    An embedded integration platform-as-a-service (iPaaS) that enables B2B SaaS companies to build, launch, and manage...
  • Rackspace Technology
    Rackspace Technology is a multicloud solutions provider offering managed services, professional services, and consulting across...
  • Radius
    Application platform for cloud-native applications that enables developers to define, deploy, and manage applications across...
  • Roper Technologies
    Roper Technologies is a diversified technology holding company (NASDAQ: ROP) that acquires, manages, and develops...
  • Salesforce
    The world's leading customer relationship management platform and a pioneer of cloud-based enterprise software. Provides...
  • SAP
    A German multinational enterprise software company and the world's leading provider of ERP and business...
  • Science Applications International Corporation (SAIC)
    Science Applications International Corporation (SAIC) is a leading American technology integrator providing full life cycle...
  • ServiceNow
    A cloud computing company providing digital workflow automation for enterprise IT service management and business...
  • Slack
    A channel-based messaging and collaboration platform offering real-time chat, file sharing, search, third-party app integrations,...
  • Snowflake
    A cloud-based data warehousing and analytics company enabling organizations to store, process, and analyze massive...
  • Snyk
    A developer-first security platform for finding and fixing vulnerabilities in code, open-source dependencies, container images,...
  • SPIRE
    SPIRE (SPIFFE Runtime Environment) is the reference implementation of the SPIFFE standard, providing a toolchain...
  • SS AND C Technologies
    Fortune 1000 company SS AND C Technologies. Public API documentation has not yet been catalogued...
  • Synopsys
    Synopsys is a global leader in semiconductor design EDA tools and software security testing. The...
  • TD SYNNEX
    TD SYNNEX is one of the world's largest IT distributors and solutions aggregators, serving over...
  • Toast
    Toast is a restaurant technology platform providing cloud-based point-of-sale, payment processing, and business management tools...
  • Upbound
    Upbound is a universal cloud platform built on Crossplane, providing managed control planes and a...
  • Workday
    A leading enterprise cloud software company providing financial management, human capital management, and planning solutions....
  • WSO2
    An open-source technology provider offering enterprise solutions for API management, integration, and identity and access...
  • Xerox
    Xerox is a global technology company and document management leader providing printing, digital document management,...
  • Zoho Corporation
    A privately held global software company offering more than 55 integrated business applications including CRM,...
  • Zoom
    A communications technology company providing video conferencing, online meetings, chat, and collaboration tools. Became essential...
  • Zscaler
    A cloud-delivered zero-trust security platform providing secure access to internet, SaaS, and private applications via...

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
1817 capabilities

Publishes a Google Tag Manager container version and notifies the marketing analytics Slack channel of the deployment.

naftiko: '0.5'
info:
  label: Google Tag Manager Container Version Publish
  description: Publishes a Google Tag Manager container version and notifies the marketing analytics Slack channel of the deployment.
  tags:
  - marketing
  - analytics
  - google-tag-manager
  - slack
capability:
  exposes:
  - type: mcp
    namespace: martech-ops
    port: 8080
    tools:
    - name: publish-gtm-version
      description: Given a GTM account, container, and version IDs, publish the container version and notify the analytics Slack channel.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: GTM account ID.
      - name: container_id
        in: body
        type: string
        description: GTM container ID.
      - name: version_id
        in: body
        type: string
        description: GTM container version ID.
      steps:
      - name: publish-version
        type: call
        call: gtm.publish-version
        with:
          account_id: '{{account_id}}'
          container_id: '{{container_id}}'
          version_id: '{{version_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: marketing-analytics
          text: GTM container {{container_id}} version {{version_id}} published successfully.
  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/{{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
  - 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 → google-tag-manager-container-version-publish.yml

When New Relic triggers a critical alert condition, creates a Jira incident ticket and notifies the on-call team via Slack.

naftiko: '0.5'
info:
  label: New Relic Alert to Jira
  description: When New Relic triggers a critical alert condition, creates a Jira incident ticket and notifies the on-call team via Slack.
  tags:
  - monitoring
  - incident-management
  - new-relic
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-newrelic-alert
      description: Given a New Relic alert condition ID and violation details, create a Jira incident and alert the on-call Slack channel.
      inputParameters:
      - name: condition_id
        in: body
        type: string
        description: New Relic alert condition ID.
      - name: violation_url
        in: body
        type: string
        description: New Relic violation URL.
      - name: entity_name
        in: body
        type: string
        description: Affected entity name.
      steps:
      - name: create-jira
        type: call
        call: jira.create-issue
        with:
          project_key: OPS
          issuetype: Bug
          summary: 'New Relic alert: {{entity_name}}'
          description: 'Condition {{condition_id}} violated. Details: {{violation_url}}'
      - name: notify-oncall
        type: call
        call: slack.post-message
        with:
          channel: oncall-alerts
          text: 'New Relic critical alert on {{entity_name}} | Jira: {{create-jira.key}} | {{violation_url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://adobe.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 → new-relic-alert-to-jira.yml

Triggers SAP S/4HANA month-end financial close for Adobe's fiscal period, validates journal completeness, and notifies the finance team via Teams.

naftiko: '0.5'
info:
  label: Monthly Financial Period Close
  description: Triggers SAP S/4HANA month-end financial close for Adobe's fiscal period, validates journal completeness, and notifies the finance team via Teams.
  tags:
  - finance
  - erp
  - period-close
  - sap
  - accounting
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: trigger-period-close
      description: Given a fiscal period and company code, initiate the SAP period close sequence and validate journal postings. Post completion status to the finance Teams channel. Use at month end to automate the financial close workflow.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period in YYYYPP format, e.g. '202603'.
      - name: company_code
        in: body
        type: string
        description: SAP company code, e.g. 'ADBE'.
      - name: finance_channel_id
        in: body
        type: string
        description: Finance Teams channel ID.
      steps:
      - name: close-period
        type: call
        call: sap-fi.close-period
        with:
          fiscal_period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: validate-journals
        type: call
        call: sap-journals.check-completeness
        with:
          fiscal_period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: notify-finance
        type: call
        call: msteams-finance.post-channel-message
        with:
          channel_id: '{{finance_channel_id}}'
          text: 'Period {{fiscal_period}} close complete for {{company_code}}. Journal status: {{validate-journals.status}} | Open items: {{validate-journals.open_count}}'
  consumes:
  - type: http
    namespace: sap-fi
    baseUri: https://adobe-s4.sap.com/sap/opu/odata/sap/FAR_PERIOD_CLOSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: period-close
      path: /PeriodClose
      operations:
      - name: close-period
        method: POST
  - type: http
    namespace: sap-journals
    baseUri: https://adobe-s4.sap.com/sap/opu/odata/sap/FAR_JOURNAL_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-validation
      path: /JournalEntryCompleteness
      inputParameters:
      - name: fiscal_period
        in: query
      - name: company_code
        in: query
      operations:
      - name: check-completeness
        method: GET
  - type: http
    namespace: msteams-finance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → monthly-financial-period-close.yml

Retrieves the status of a Salesforce Marketing Cloud journey by journey ID, returning active contacts and completion rate.

naftiko: '0.5'
info:
  label: Salesforce Marketing Cloud Journey Status
  description: Retrieves the status of a Salesforce Marketing Cloud journey by journey ID, returning active contacts and completion rate.
  tags:
  - marketing
  - customer-engagement
  - salesforce-marketing-cloud
capability:
  exposes:
  - type: mcp
    namespace: marketing-ops
    port: 8080
    tools:
    - name: get-journey-status
      description: Given a Salesforce Marketing Cloud journey ID, return the journey status, active contact count, and completion rate.
      inputParameters:
      - name: journey_id
        in: body
        type: string
        description: Marketing Cloud journey ID.
      call: sfmc.get-journey
      with:
        journey_id: '{{journey_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: active_contacts
        type: integer
        mapping: $.stats.activeContacts
      - name: completion_rate
        type: number
        mapping: $.stats.completionRate
  consumes:
  - type: http
    namespace: sfmc
    baseUri: https://adobe.rest.marketingcloudapis.com
    authentication:
      type: bearer
      token: $secrets.sfmc_token
    resources:
    - name: journeys
      path: /interaction/v1/interactions/{{journey_id}}
      inputParameters:
      - name: journey_id
        in: path
      operations:
      - name: get-journey
        method: GET
Open in Framework → View in Fleet → salesforce-marketing-cloud-journey-status.yml

Fetches a Salesforce contact record and syncs enriched fields (title, phone, company) into HubSpot for marketing campaigns.

naftiko: '0.5'
info:
  label: HubSpot Contact Enrichment from Salesforce
  description: Fetches a Salesforce contact record and syncs enriched fields (title, phone, company) into HubSpot for marketing campaigns.
  tags:
  - marketing
  - crm
  - hubspot
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: marketing-sync
    port: 8080
    tools:
    - name: enrich-hubspot-contact
      description: Given a Salesforce contact ID, fetch enriched fields and upsert them into the matching HubSpot contact record.
      inputParameters:
      - name: sf_contact_id
        in: body
        type: string
        description: Salesforce contact ID.
      steps:
      - name: get-sf-contact
        type: call
        call: salesforce.get-contact
        with:
          contact_id: '{{sf_contact_id}}'
      - name: upsert-hubspot
        type: call
        call: hubspot.upsert-contact
        with:
          email: '{{get-sf-contact.Email}}'
          properties:
            firstname: '{{get-sf-contact.FirstName}}'
            lastname: '{{get-sf-contact.LastName}}'
            jobtitle: '{{get-sf-contact.Title}}'
            company: '{{get-sf-contact.Account.Name}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adobe.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: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts
      operations:
      - name: upsert-contact
        method: POST
Open in Framework → View in Fleet → hubspot-contact-enrichment-from-salesforce.yml

Retrieves all Okta group memberships for a given user, returning group names and IDs for access review.

naftiko: '0.5'
info:
  label: Okta User Group Membership Lookup
  description: Retrieves all Okta group memberships for a given user, returning group names and IDs for access review.
  tags:
  - identity
  - access-management
  - okta
capability:
  exposes:
  - type: mcp
    namespace: iam
    port: 8080
    tools:
    - name: get-user-groups
      description: Given an Okta user ID, return all group memberships with group names and IDs. Use for quarterly access reviews and provisioning audits.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: Okta user ID.
      call: okta.list-user-groups
      with:
        user_id: '{{user_id}}'
      outputParameters:
      - name: groups
        type: array
        mapping: $.[*].profile.name
  consumes:
  - type: http
    namespace: okta
    baseUri: https://adobe.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: user-groups
      path: /users/{{user_id}}/groups
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: list-user-groups
        method: GET
Open in Framework → View in Fleet → okta-user-group-membership-lookup.yml

Fetches all completed Jira issues for a version, formats release notes, and publishes them as a Confluence page.

naftiko: '0.5'
info:
  label: Jira Release Notes Generator
  description: Fetches all completed Jira issues for a version, formats release notes, and publishes them as a Confluence page.
  tags:
  - engineering
  - release-management
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: release-ops
    port: 8080
    tools:
    - name: generate-release-notes
      description: Given a Jira project key and version name, fetch all resolved issues and create a Confluence release notes page.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: version_name
        in: body
        type: string
        description: Jira fix version name.
      - name: confluence_space
        in: body
        type: string
        description: Confluence space key for release notes.
      steps:
      - name: get-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND fixVersion='{{version_name}}' AND status=Done
      - name: create-page
        type: call
        call: confluence.create-content
        with:
          space_key: '{{confluence_space}}'
          title: Release Notes - {{version_name}}
          body: '{{get-issues.formatted_notes}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://adobe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search-issues
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://adobe.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-content
        method: POST
Open in Framework → View in Fleet → jira-release-notes-generator.yml

Retrieves a payroll preview from ADP Workforce Now for a given pay period, returning gross pay, deductions, and net pay totals.

naftiko: '0.5'
info:
  label: ADP Payroll Preview Lookup
  description: Retrieves a payroll preview from ADP Workforce Now for a given pay period, returning gross pay, deductions, and net pay totals.
  tags:
  - hr
  - payroll
  - adp
capability:
  exposes:
  - type: mcp
    namespace: payroll-ops
    port: 8080
    tools:
    - name: get-payroll-preview
      description: Given an ADP pay period ID, return the payroll preview with gross pay, total deductions, and net pay.
      inputParameters:
      - name: pay_period_id
        in: body
        type: string
        description: ADP pay period identifier.
      call: adp.get-payroll-preview
      with:
        pay_period_id: '{{pay_period_id}}'
      outputParameters:
      - name: gross_pay
        type: number
        mapping: $.payrollPreview.grossPay.amount
      - name: deductions
        type: number
        mapping: $.payrollPreview.totalDeductions.amount
      - name: net_pay
        type: number
        mapping: $.payrollPreview.netPay.amount
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll
      path: /payroll-previews/{{pay_period_id}}
      inputParameters:
      - name: pay_period_id
        in: path
      operations:
      - name: get-payroll-preview
        method: GET
Open in Framework → View in Fleet → adp-payroll-preview-lookup.yml

Enrolls a qualified Salesforce lead in a Marketo product-specific nurture program based on their Creative Cloud trial activity.

naftiko: '0.5'
info:
  label: Marketo Lead Nurture Enrollment from Salesforce
  description: Enrolls a qualified Salesforce lead in a Marketo product-specific nurture program based on their Creative Cloud trial activity.
  tags:
  - marketing
  - salesforce
  - marketo
  - lead-nurture
  - creative-cloud
capability:
  exposes:
  - type: mcp
    namespace: lead-nurture
    port: 8080
    tools:
    - name: enroll-lead-in-nurture
      description: Given a Salesforce lead ID and Marketo program ID, retrieve the lead's details from Salesforce and enroll them in the specified Marketo nurture program. Use when a Creative Cloud trial lead qualifies for a nurture track.
      inputParameters:
      - name: salesforce_lead_id
        in: body
        type: string
        description: Salesforce lead record ID.
      - name: marketo_program_id
        in: body
        type: string
        description: Marketo program ID for the nurture campaign.
      steps:
      - name: get-lead
        type: call
        call: salesforce-leads.get-lead
        with:
          lead_id: '{{salesforce_lead_id}}'
      - name: enroll-in-program
        type: call
        call: marketo-programs.add-to-program
        with:
          email: '{{get-lead.Email}}'
          first_name: '{{get-lead.FirstName}}'
          last_name: '{{get-lead.LastName}}'
          program_id: '{{marketo_program_id}}'
  consumes:
  - type: http
    namespace: salesforce-leads
    baseUri: https://adobe.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: marketo-programs
    baseUri: https://adobe.mktorest.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.marketo_token
    resources:
    - name: program-members
      path: /leads/programs/{{program_id}}.json
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: add-to-program
        method: POST
Open in Framework → View in Fleet → marketo-lead-nurture-enrollment-from-salesforce.yml

Retrieves performance insights for a Meta (Facebook) advertising campaign, returning reach, impressions, spend, and conversions.

naftiko: '0.5'
info:
  label: Meta Ads Campaign Report
  description: Retrieves performance insights for a Meta (Facebook) advertising campaign, returning reach, impressions, spend, and conversions.
  tags:
  - marketing
  - advertising
  - meta
  - facebook
capability:
  exposes:
  - type: mcp
    namespace: paid-media
    port: 8080
    tools:
    - name: get-meta-campaign-report
      description: Given a Meta ad campaign ID, return reach, impressions, spend, and conversion count for the specified date range.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Meta Ads campaign ID.
      - name: date_preset
        in: body
        type: string
        description: Date preset (e.g., last_7d, last_30d).
      call: meta-ads.get-insights
      with:
        campaign_id: '{{campaign_id}}'
        date_preset: '{{date_preset}}'
      outputParameters:
      - name: reach
        type: integer
        mapping: $.data[0].reach
      - name: impressions
        type: integer
        mapping: $.data[0].impressions
      - name: spend
        type: string
        mapping: $.data[0].spend
  consumes:
  - type: http
    namespace: meta-ads
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_ads_token
    resources:
    - name: insights
      path: /{{campaign_id}}/insights
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-insights
        method: GET
Open in Framework → View in Fleet → meta-ads-campaign-report.yml

Triggers a Terraform Cloud plan to detect infrastructure drift and, if drift is found, creates a Jira ticket and alerts the infra Slack channel.

naftiko: '0.5'
info:
  label: Terraform Drift Detection Alert
  description: Triggers a Terraform Cloud plan to detect infrastructure drift and, if drift is found, creates a Jira ticket and alerts the infra Slack channel.
  tags:
  - infrastructure
  - iac
  - terraform
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: detect-terraform-drift
      description: Given a Terraform Cloud workspace ID, trigger a speculative plan. If drift is detected, create a Jira ticket and alert the infra Slack channel.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID.
      steps:
      - name: trigger-plan
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          is_destroy: false
          message: Automated drift detection
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: INFRA
          issuetype: Task
          summary: Terraform drift detected in workspace {{workspace_id}}
          description: 'Plan run: {{trigger-plan.id}}'
      - name: alert-infra
        type: call
        call: slack.post-message
        with:
          channel: infra-alerts
          text: 'Drift detected in Terraform workspace {{workspace_id}}. Jira: {{create-ticket.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://adobe.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 → terraform-drift-detection-alert.yml

Invokes an AWS Lambda function with a JSON payload and returns the function response.

naftiko: '0.5'
info:
  label: AWS Lambda Function Invoke
  description: Invokes an AWS Lambda function with a JSON payload and returns the function response.
  tags:
  - cloud
  - serverless
  - aws
  - aws-lambda
capability:
  exposes:
  - type: mcp
    namespace: serverless-ops
    port: 8080
    tools:
    - name: invoke-lambda
      description: Given an AWS Lambda function name and JSON payload, invoke the function synchronously and return the response. Use for ad-hoc serverless task execution.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: Lambda function name or ARN.
      - name: payload
        in: body
        type: string
        description: JSON payload for the function.
      call: lambda.invoke-function
      with:
        function_name: '{{function_name}}'
        payload: '{{payload}}'
      outputParameters:
      - name: status_code
        type: integer
        mapping: $.StatusCode
      - name: response
        type: string
        mapping: $.Payload
  consumes:
  - type: http
    namespace: lambda
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: functions
      path: /functions/{{function_name}}/invocations
      inputParameters:
      - name: function_name
        in: path
      operations:
      - name: invoke-function
        method: POST
Open in Framework → View in Fleet → aws-lambda-function-invoke.yml

Retrieves the signing status of an Adobe Sign agreement by agreement ID, returning signer details and completion percentage.

naftiko: '0.5'
info:
  label: Adobe Sign Document Status
  description: Retrieves the signing status of an Adobe Sign agreement by agreement ID, returning signer details and completion percentage.
  tags:
  - legal
  - document-signing
  - adobe
capability:
  exposes:
  - type: mcp
    namespace: legal-ops
    port: 8080
    tools:
    - name: get-agreement-status
      description: Given an Adobe Sign agreement ID, return the current status, list of signers, and completion percentage. Use for contract tracking.
      inputParameters:
      - name: agreement_id
        in: body
        type: string
        description: Adobe Sign agreement ID.
      call: adobe-sign.get-agreement
      with:
        agreement_id: '{{agreement_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: signers
        type: array
        mapping: $.participantSetsInfo[*].memberInfos[*].email
      - name: completion_pct
        type: number
        mapping: $.completionPercentage
  consumes:
  - type: http
    namespace: adobe-sign
    baseUri: https://api.na1.adobesign.com/api/rest/v6
    authentication:
      type: bearer
      token: $secrets.adobe_sign_token
    resources:
    - name: agreements
      path: /agreements/{{agreement_id}}
      inputParameters:
      - name: agreement_id
        in: path
      operations:
      - name: get-agreement
        method: GET
Open in Framework → View in Fleet → adobe-sign-document-status.yml

At sprint close, fetches Jira velocity metrics, refreshes the Power BI agile dashboard, and posts a sprint summary to the engineering Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Report Publication
  description: At sprint close, fetches Jira velocity metrics, refreshes the Power BI agile dashboard, and posts a sprint summary to the engineering Teams channel.
  tags:
  - devops
  - jira
  - agile
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: publish-sprint-velocity
      description: Given a Jira board ID and sprint ID, retrieve completed story points and velocity metrics, refresh the Power BI agile dashboard, and post a sprint summary to the engineering Teams channel. Use at each sprint close.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira software board ID.
      - name: sprint_id
        in: body
        type: string
        description: Completed sprint ID.
      - name: pbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the agile velocity dashboard.
      - name: eng_channel_id
        in: body
        type: string
        description: Engineering Teams channel ID.
      steps:
      - name: get-sprint-metrics
        type: call
        call: jira-agile.get-sprint-report
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: refresh-pbi-agile
        type: call
        call: powerbi-agile.trigger-refresh
        with:
          dataset_id: '{{pbi_dataset_id}}'
      - name: post-summary
        type: call
        call: msteams-agile.post-channel-message
        with:
          channel_id: '{{eng_channel_id}}'
          text: 'Sprint {{sprint_id}} closed. Velocity: {{get-sprint-metrics.completed_points}} pts | Completion: {{get-sprint-metrics.completion_rate}}% | Dashboard refreshed.'
  consumes:
  - type: http
    namespace: jira-agile
    baseUri: https://adobe.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprint-issues
      path: /board/{{board_id}}/sprint/{{sprint_id}}/issue
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-report
        method: GET
  - type: http
    namespace: powerbi-agile
    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: trigger-refresh
        method: POST
  - type: http
    namespace: msteams-agile
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → jira-sprint-velocity-report-publication.yml

When a Figma file is updated, posts a review request to the design team Slack channel with a link to the file.

naftiko: '0.5'
info:
  label: Figma Design Review Notification
  description: When a Figma file is updated, posts a review request to the design team Slack channel with a link to the file.
  tags:
  - design
  - collaboration
  - figma
  - slack
capability:
  exposes:
  - type: mcp
    namespace: design-ops
    port: 8080
    tools:
    - name: notify-design-review
      description: Given a Figma file key and reviewer channel, fetch file metadata and post a review request to Slack.
      inputParameters:
      - name: file_key
        in: body
        type: string
        description: Figma file key.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for design reviews.
      steps:
      - name: get-file
        type: call
        call: figma.get-file
        with:
          file_key: '{{file_key}}'
      - name: post-review
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Design review requested: {{get-file.name}} — https://www.figma.com/file/{{file_key}}'
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: files
      path: /files/{{file_key}}
      inputParameters:
      - name: file_key
        in: path
      operations:
      - name: get-file
        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 → figma-design-review-notification.yml

Exports an Adobe Analytics segment audience to a CSV in Amazon S3 for downstream activation in marketing platforms.

naftiko: '0.5'
info:
  label: Adobe Analytics Segment Export
  description: Exports an Adobe Analytics segment audience to a CSV in Amazon S3 for downstream activation in marketing platforms.
  tags:
  - analytics
  - adobe-analytics
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: analytics-ops
    port: 8080
    tools:
    - name: export-analytics-segment
      description: Given an Adobe Analytics segment ID, export the audience to a CSV file in S3. Use when marketing needs a fresh audience list for campaign targeting.
      inputParameters:
      - name: segment_id
        in: body
        type: string
        description: Adobe Analytics segment ID.
      - name: s3_bucket
        in: body
        type: string
        description: Target S3 bucket name.
      steps:
      - name: fetch-segment
        type: call
        call: adobe-analytics.get-segment
        with:
          segment_id: '{{segment_id}}'
      - name: upload-csv
        type: call
        call: s3.put-object
        with:
          bucket: '{{s3_bucket}}'
          key: segments/{{segment_id}}/export.csv
          body: '{{fetch-segment.data}}'
  consumes:
  - type: http
    namespace: adobe-analytics
    baseUri: https://analytics.adobe.io/api
    authentication:
      type: bearer
      token: $secrets.adobe_analytics_token
    resources:
    - name: segments
      path: /segments/{{segment_id}}
      inputParameters:
      - name: segment_id
        in: path
      operations:
      - name: get-segment
        method: GET
  - 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
Open in Framework → View in Fleet → adobe-analytics-segment-export.yml

Retrieves a goods receipt document from SAP S/4HANA by document number and returns quantity, posting date, and material details.

naftiko: '0.5'
info:
  label: SAP Goods Receipt Verification
  description: Retrieves a goods receipt document from SAP S/4HANA by document number and returns quantity, posting date, and material details.
  tags:
  - procurement
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: erp-ops
    port: 8080
    tools:
    - name: get-goods-receipt
      description: Given a SAP goods receipt document number, return posting date, material, quantity, and plant. Use for three-way match verification.
      inputParameters:
      - name: document_number
        in: body
        type: string
        description: SAP goods receipt document number.
      call: sap.get-goods-receipt
      with:
        doc_number: '{{document_number}}'
      outputParameters:
      - name: posting_date
        type: string
        mapping: $.d.PostingDate
      - name: material
        type: string
        mapping: $.d.Material
      - name: quantity
        type: number
        mapping: $.d.Quantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adobe-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('{{doc_number}}')
      inputParameters:
      - name: doc_number
        in: path
      operations:
      - name: get-goods-receipt
        method: GET
Open in Framework → View in Fleet → sap-goods-receipt-verification.yml

When AWS Cost Anomaly Detection raises a critical alert, creates a Datadog event, opens a Jira FinOps ticket, and posts to the cloud-finops Teams channel.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Response
  description: When AWS Cost Anomaly Detection raises a critical alert, creates a Datadog event, opens a Jira FinOps ticket, and posts to the cloud-finops Teams channel.
  tags:
  - finops
  - cloud
  - aws
  - datadog
  - jira
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS cost anomaly ID, service, and estimated overage, create a Datadog warning event, open a Jira FinOps task, and alert the cloud-finops Teams channel. Use when AWS Cost Anomaly Detection triggers above threshold.
      inputParameters:
      - name: anomaly_id
        in: body
        type: string
        description: AWS Cost Anomaly Detection anomaly ID.
      - name: service_name
        in: body
        type: string
        description: AWS service generating the anomaly.
      - name: estimated_overage_usd
        in: body
        type: number
        description: Estimated cost overage in USD.
      - name: finops_channel_id
        in: body
        type: string
        description: FinOps Teams channel ID.
      steps:
      - name: create-dd-event
        type: call
        call: datadog-finops.create-event
        with:
          title: 'AWS Cost Anomaly: {{service_name}}'
          text: Anomaly {{anomaly_id}} — overage ${{estimated_overage_usd}}
          alert_type: warning
      - name: open-jira
        type: call
        call: jira-finops.create-issue
        with:
          project_key: FINOPS
          issuetype: Task
          summary: 'Cost anomaly: {{service_name}} +${{estimated_overage_usd}}'
          description: 'Anomaly {{anomaly_id}}. Datadog: {{create-dd-event.id}}'
      - name: alert-finops
        type: call
        call: msteams-finops.post-channel-message
        with:
          channel_id: '{{finops_channel_id}}'
          text: 'AWS Cost Anomaly on {{service_name}}: +${{estimated_overage_usd}} | Jira: {{open-jira.key}} | Datadog: {{create-dd-event.url}}'
  consumes:
  - type: http
    namespace: datadog-finops
    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-finops
    baseUri: https://adobe.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-finops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → cloud-cost-anomaly-response.yml

Retrieves Datadog SLO compliance metrics for Adobe's core services, publishes to Power BI, and emails the SLO report to engineering leadership.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Report
  description: Retrieves Datadog SLO compliance metrics for Adobe's core services, publishes to Power BI, and emails the SLO report to engineering leadership.
  tags:
  - observability
  - datadog
  - slo
  - reporting
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: publish-slo-report
      description: Given a time window and Power BI dataset ID, fetch SLO compliance metrics for all monitored services from Datadog, trigger a Power BI refresh, and email the SLO summary to engineering leadership. Use weekly for reliability review meetings.
      inputParameters:
      - name: from_ts
        in: body
        type: integer
        description: Unix timestamp for the start of the SLO measurement period.
      - name: to_ts
        in: body
        type: integer
        description: Unix timestamp for the end of the SLO measurement period.
      - name: pbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the SLO dashboard.
      - name: engineering_email
        in: body
        type: string
        description: Engineering leadership email for the SLO report.
      steps:
      - name: get-slos
        type: call
        call: datadog-slo.get-slo-history
        with:
          from_ts: '{{from_ts}}'
          to_ts: '{{to_ts}}'
      - name: refresh-pbi-slo
        type: call
        call: powerbi-slo.trigger-refresh
        with:
          dataset_id: '{{pbi_dataset_id}}'
      - name: send-slo-report
        type: call
        call: msgraph-slo.send-email
        with:
          to: '{{engineering_email}}'
          subject: SLO Compliance Report
          body: 'Services meeting SLO: {{get-slos.compliant_count}} | Services breaching SLO: {{get-slos.breaching_count}} | Dashboard refreshed.'
  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: slo-history
      path: /slo/history
      inputParameters:
      - name: from_ts
        in: query
      - name: to_ts
        in: query
      operations:
      - name: get-slo-history
        method: GET
  - type: http
    namespace: powerbi-slo
    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: trigger-refresh
        method: POST
  - type: http
    namespace: msgraph-slo
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender}}/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → datadog-slo-compliance-report.yml

Executes a read-only SQL query against Snowflake and returns the result set for ad-hoc analytics requests.

naftiko: '0.5'
info:
  label: Snowflake Query Execution
  description: Executes a read-only SQL query against Snowflake and returns the result set for ad-hoc analytics requests.
  tags:
  - data
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: run-snowflake-query
      description: Given a SQL query string, execute it against Snowflake and return the result rows. Use for ad-hoc data lookups by analysts and business users.
      inputParameters:
      - name: sql
        in: body
        type: string
        description: Read-only SQL query to execute.
      - name: warehouse
        in: body
        type: string
        description: Snowflake warehouse to use.
      call: snowflake.execute-statement
      with:
        statement: '{{sql}}'
        warehouse: '{{warehouse}}'
      outputParameters:
      - name: rows
        type: array
        mapping: $.data
      - name: row_count
        type: integer
        mapping: $.resultSetMetaData.numRows
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adobe.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-query-execution.yml

Retrieves headcount and payroll cost by cost center from Workday for use in monthly finance reporting and headcount planning.

naftiko: '0.5'
info:
  label: Workday Payroll Headcount Snapshot
  description: Retrieves headcount and payroll cost by cost center from Workday for use in monthly finance reporting and headcount planning.
  tags:
  - hr
  - payroll
  - workday
  - headcount
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-payroll
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Returns headcount and payroll cost grouped by cost center from Workday as of the specified date. Use for monthly finance reviews and headcount planning.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: Snapshot date in YYYY-MM-DD format.
      call: workday-hcm.get-headcount
      with:
        effective_date: '{{as_of_date}}'
      outputParameters:
      - name: total_headcount
        type: string
        mapping: $.Report_Entry[0].Total_Headcount
      - name: total_cost
        type: string
        mapping: $.Report_Entry[0].Total_Labor_Cost
  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: headcount
      path: /reports/headcount_by_cost_center
      inputParameters:
      - name: effective_date
        in: query
      operations:
      - name: get-headcount
        method: GET
Open in Framework → View in Fleet → workday-payroll-headcount-snapshot.yml

When Datadog fires a critical alert on a production service, opens a P1 ServiceNow incident, pages the on-call engineer via PagerDuty, and posts to the IT war-room Teams channel.

naftiko: '0.5'
info:
  label: IT P1 Incident Triage
  description: When Datadog fires a critical alert on a production service, opens a P1 ServiceNow incident, pages the on-call engineer via PagerDuty, and posts to the IT war-room Teams channel.
  tags:
  - itsm
  - incident-response
  - datadog
  - pagerduty
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog critical alert for a production Adobe service, create a P1 ServiceNow incident, trigger PagerDuty to page the on-call engineer, and post to the IT war-room Teams channel. Use when monitoring detects a critical service failure.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Datadog monitor alert ID.
      - name: service_name
        in: body
        type: string
        description: Affected Adobe service name.
      - name: alert_message
        in: body
        type: string
        description: Human-readable alert description.
      - name: warroom_channel_id
        in: body
        type: string
        description: IT war-room Teams channel ID.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: P1 Alert — {{service_name}}
          description: 'Datadog alert {{alert_id}}: {{alert_message}}'
          priority: '1'
      - name: page-oncall
        type: call
        call: pagerduty.trigger-incident
        with:
          title: P1 — {{service_name}}
          severity: critical
          details: 'INC: {{create-incident.number}} | Alert: {{alert_id}}'
      - name: post-warroom
        type: call
        call: msteams-it.post-channel-message
        with:
          channel_id: '{{warroom_channel_id}}'
          text: 'P1 INCIDENT: {{service_name}} | INC: {{create-incident.number}} | PagerDuty: {{page-oncall.incident_key}} | {{alert_message}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://adobe.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://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: enqueue
      path: /enqueue
      operations:
      - name: trigger-incident
        method: POST
  - type: http
    namespace: msteams-it
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → it-p1-incident-triage.yml

Triggers a Terraform Cloud run to provision a new cloud environment for a product team, and notifies the DevOps Teams channel upon completion.

naftiko: '0.5'
info:
  label: Terraform Cloud Environment Provisioning
  description: Triggers a Terraform Cloud run to provision a new cloud environment for a product team, and notifies the DevOps Teams channel upon completion.
  tags:
  - devops
  - terraform
  - cloud
  - infrastructure
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-cloud-environment
      description: Given a Terraform Cloud workspace ID and environment label, trigger a plan-and-apply run to provision cloud infrastructure and notify the DevOps Teams channel. Use when product teams need new cloud environments for development or staging.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID.
      - name: environment_label
        in: body
        type: string
        description: Human-readable environment label, e.g. 'photoshop-staging'.
      - name: devops_channel_id
        in: body
        type: string
        description: DevOps Teams channel ID.
      steps:
      - name: trigger-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: Provisioning {{environment_label}}
          auto_apply: 'true'
      - name: notify-devops
        type: call
        call: msteams-devops.post-channel-message
        with:
          channel_id: '{{devops_channel_id}}'
          text: 'Terraform run triggered for {{environment_label}} (workspace {{workspace_id}}). Run ID: {{trigger-run.data.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: msteams-devops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → terraform-cloud-environment-provisioning.yml

When a Salesforce support case is escalated to engineering, creates a Jira bug ticket and posts the link back into the Salesforce case notes.

naftiko: '0.5'
info:
  label: Salesforce Case Escalation to Jira
  description: When a Salesforce support case is escalated to engineering, creates a Jira bug ticket and posts the link back into the Salesforce case notes.
  tags:
  - support
  - engineering
  - salesforce
  - jira
capability:
  exposes:
  - type: mcp
    namespace: support-eng
    port: 8080
    tools:
    - name: escalate-case-to-jira
      description: Given a Salesforce case ID and severity, create a Jira engineering ticket and update the Salesforce case with the Jira link.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce case ID.
      - name: severity
        in: body
        type: string
        description: Severity level (P1, P2, P3).
      - name: summary
        in: body
        type: string
        description: Brief summary of the engineering issue.
      steps:
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '{{summary}}'
          priority: '{{severity}}'
          description: Escalated from Salesforce case {{case_id}}.
      - name: update-sf-case
        type: call
        call: salesforce.update-case
        with:
          case_id: '{{case_id}}'
          jira_link: '{{create-jira-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://adobe.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: salesforce
    baseUri: https://adobe.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
Open in Framework → View in Fleet → salesforce-case-escalation-to-jira.yml

Retrieves the direct reports and manager chain for a Workday employee, returning names and titles.

naftiko: '0.5'
info:
  label: Workday Org Chart Lookup
  description: Retrieves the direct reports and manager chain for a Workday employee, returning names and titles.
  tags:
  - hr
  - workforce
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: get-org-chart
      description: Given a Workday employee ID, return the manager name, manager title, and list of direct reports. Use for org chart queries and approval routing.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-worker
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: manager_name
        type: string
        mapping: $.Worker.Manager.Name
      - name: manager_title
        type: string
        mapping: $.Worker.Manager.Title
      - name: direct_reports
        type: array
        mapping: $.Worker.DirectReports[*].Name
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/adobe
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: workers
      path: /Human_Resources/v40.0/Get_Workers
      operations:
      - name: get-worker
        method: GET
Open in Framework → View in Fleet → workday-org-chart-lookup.yml

When a Salesforce opportunity moves to Closed-Won, fetches deal details and posts a celebration message to the sales wins Slack channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Update to Slack
  description: When a Salesforce opportunity moves to Closed-Won, fetches deal details and posts a celebration message to the sales wins Slack channel.
  tags:
  - sales
  - crm
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: announce-closed-won
      description: Given a Salesforce opportunity ID, fetch deal details and post a win announcement to the Slack sales-wins channel.
      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: post-win
        type: call
        call: slack.post-message
        with:
          channel: sales-wins
          text: 'Deal Won: {{get-opportunity.Name}} — ${{get-opportunity.Amount}} | Account: {{get-opportunity.Account.Name}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adobe.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: 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 → salesforce-opportunity-update-to-slack.yml

Fetches a Google Analytics weekly traffic summary and posts the key metrics to a marketing Slack channel.

naftiko: '0.5'
info:
  label: Google Analytics Report to Slack
  description: Fetches a Google Analytics weekly traffic summary and posts the key metrics to a marketing Slack channel.
  tags:
  - marketing
  - analytics
  - google-analytics
  - slack
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: post-weekly-traffic
      description: Fetch weekly Google Analytics traffic metrics and post a summary to the marketing Slack channel.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: Google Analytics property ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the report.
      steps:
      - name: get-report
        type: call
        call: ga.run-report
        with:
          property_id: '{{property_id}}'
          date_range: last7days
      - name: post-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Weekly traffic: {{get-report.sessions}} sessions, {{get-report.users}} users, {{get-report.bounce_rate}}% bounce rate'
  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: 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 → google-analytics-report-to-slack.yml

When a compensation change is approved in Workday, sends a confirmation email to the employee and notifies HR via Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Compensation Change Notification
  description: When a compensation change is approved in Workday, sends a confirmation email to the employee and notifies HR via Microsoft Teams.
  tags:
  - hr
  - compensation
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: notify-comp-change
      description: Given a Workday employee ID and compensation event ID, fetch the change details, email the employee, and notify the HR Teams channel.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: comp_event_id
        in: body
        type: string
        description: Workday compensation event ID.
      steps:
      - name: get-comp-change
        type: call
        call: workday.get-comp-event
        with:
          employee_id: '{{employee_id}}'
          event_id: '{{comp_event_id}}'
      - name: email-employee
        type: call
        call: msgraph.send-mail
        with:
          to: '{{get-comp-change.employee_email}}'
          subject: Compensation Change Confirmed
          body: Your compensation change effective {{get-comp-change.effective_date}} has been approved.
      - name: notify-hr
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: hr-notifications
          text: 'Comp change processed for {{employee_id}}: effective {{get-comp-change.effective_date}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/adobe
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: compensation
      path: /Compensation/v40.0
      operations:
      - name: get-comp-event
        method: GET
  - 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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → workday-compensation-change-notification.yml

Triggers a customer journey in Adobe Experience Cloud based on a Salesforce opportunity stage change and logs the event to Snowflake.

naftiko: '0.5'
info:
  label: Experience Cloud Journey Trigger
  description: Triggers a customer journey in Adobe Experience Cloud based on a Salesforce opportunity stage change and logs the event to Snowflake.
  tags:
  - marketing
  - customer-experience
  - adobe-experience-cloud
  - salesforce
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cx-orchestration
    port: 8080
    tools:
    - name: trigger-customer-journey
      description: Given a Salesforce opportunity ID and new stage, trigger the corresponding Adobe Experience Cloud journey and log the event to Snowflake for analytics.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: new_stage
        in: body
        type: string
        description: New opportunity stage name.
      - name: customer_email
        in: body
        type: string
        description: Customer email for journey entry.
      steps:
      - name: trigger-journey
        type: call
        call: aec.trigger-journey
        with:
          email: '{{customer_email}}'
          journey_stage: '{{new_stage}}'
          source: salesforce-opp-{{opportunity_id}}
      - name: log-event
        type: call
        call: snowflake.insert-row
        with:
          table: CX_JOURNEY_EVENTS
          values:
            opportunity_id: '{{opportunity_id}}'
            stage: '{{new_stage}}'
            journey_id: '{{trigger-journey.journey_run_id}}'
  consumes:
  - type: http
    namespace: aec
    baseUri: https://platform.adobe.io/journey
    authentication:
      type: bearer
      token: $secrets.aec_token
    resources:
    - name: journeys
      path: /triggers
      operations:
      - name: trigger-journey
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adobe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-row
        method: POST
Open in Framework → View in Fleet → experience-cloud-journey-trigger.yml

Fetches the bucket policy for an S3 bucket, checks for public access, and posts a security finding to Slack if detected.

naftiko: '0.5'
info:
  label: AWS S3 Bucket Policy Audit
  description: Fetches the bucket policy for an S3 bucket, checks for public access, and posts a security finding to Slack if detected.
  tags:
  - security
  - cloud
  - aws
  - amazon-s3
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cloud-security
    port: 8080
    tools:
    - name: audit-s3-bucket-policy
      description: Given an S3 bucket name, retrieve the bucket policy, check for public access statements, and alert the security Slack channel if found.
      inputParameters:
      - name: bucket_name
        in: body
        type: string
        description: S3 bucket name.
      - name: slack_channel
        in: body
        type: string
        description: Security Slack channel.
      steps:
      - name: get-policy
        type: call
        call: s3.get-bucket-policy
        with:
          bucket: '{{bucket_name}}'
      - name: alert-security
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'S3 bucket policy audit for {{bucket_name}}: {{get-policy.public_access_detected}}'
  consumes:
  - 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: bucket-policy
      path: /{{bucket}}?policy
      inputParameters:
      - name: bucket
        in: path
      operations:
      - name: get-bucket-policy
        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 → aws-s3-bucket-policy-audit.yml

Retrieves a Zendesk support ticket by ID and returns the subject, status, priority, and last comment.

naftiko: '0.5'
info:
  label: Zendesk Ticket Summary Lookup
  description: Retrieves a Zendesk support ticket by ID and returns the subject, status, priority, and last comment.
  tags:
  - support
  - customer-service
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: support-ops
    port: 8080
    tools:
    - name: get-ticket-summary
      description: Given a Zendesk ticket ID, return the subject, current status, priority, and most recent comment. Use for support queue triage.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: 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://adobe.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-summary-lookup.yml

Fetches open Dependabot alerts for a GitHub repository and posts a severity-grouped summary to the security Slack channel.

naftiko: '0.5'
info:
  label: GitHub Dependabot Alert Summary
  description: Fetches open Dependabot alerts for a GitHub repository and posts a severity-grouped summary to the security Slack channel.
  tags:
  - security
  - engineering
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: appsec
    port: 8080
    tools:
    - name: summarize-dependabot-alerts
      description: Given a GitHub repository, fetch open Dependabot vulnerability alerts and post a severity-grouped count to the security Slack channel.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in org/repo format.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the summary.
      steps:
      - name: get-alerts
        type: call
        call: github.list-dependabot-alerts
        with:
          repo: '{{repo}}'
          state: open
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Dependabot alerts for {{repo}}: Critical={{get-alerts.critical_count}}, High={{get-alerts.high_count}}, Medium={{get-alerts.medium_count}}'
  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
      operations:
      - name: list-dependabot-alerts
        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-dependabot-alert-summary.yml

Lists Slack channels inactive for more than 90 days and posts a cleanup recommendation to the workspace admin channel.

naftiko: '0.5'
info:
  label: Slack Channel Archive Audit
  description: Lists Slack channels inactive for more than 90 days and posts a cleanup recommendation to the workspace admin channel.
  tags:
  - collaboration
  - governance
  - slack
capability:
  exposes:
  - type: mcp
    namespace: workspace-ops
    port: 8080
    tools:
    - name: audit-inactive-channels
      description: List Slack channels with no messages in the past N days and post a summary to the admin channel for archive consideration.
      inputParameters:
      - name: inactive_days
        in: body
        type: integer
        description: Number of days of inactivity threshold.
      - name: admin_channel
        in: body
        type: string
        description: Admin Slack channel for the report.
      steps:
      - name: list-channels
        type: call
        call: slack.list-channels
        with:
          types: public_channel
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: '{{admin_channel}}'
          text: 'Inactive channel audit: {{list-channels.inactive_count}} channels with no activity in {{inactive_days}} days. Review for archival.'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: channels
      path: /conversations.list
      operations:
      - name: list-channels
        method: GET
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-channel-archive-audit.yml

When Dynatrace detects a problem, creates a Jira operations ticket and posts the root cause analysis to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Dynatrace Problem Notification
  description: When Dynatrace detects a problem, creates a Jira operations ticket and posts the root cause analysis to a Microsoft Teams channel.
  tags:
  - monitoring
  - incident-management
  - dynatrace
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-dynatrace-problem
      description: Given a Dynatrace problem ID, fetch root cause details, create a Jira ticket, and notify the Teams operations channel.
      inputParameters:
      - name: problem_id
        in: body
        type: string
        description: Dynatrace problem ID.
      steps:
      - name: get-problem
        type: call
        call: dynatrace.get-problem
        with:
          problem_id: '{{problem_id}}'
      - name: create-jira
        type: call
        call: jira.create-issue
        with:
          project_key: OPS
          issuetype: Bug
          summary: 'Dynatrace: {{get-problem.title}}'
          description: 'Root cause: {{get-problem.rootCauseEntity}} | Impact: {{get-problem.impactLevel}}'
      - name: notify-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: ops-incidents
          text: 'Dynatrace problem: {{get-problem.title}} | Jira: {{create-jira.key}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://adobe.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: jira
    baseUri: https://adobe.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.msteams_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 → dynatrace-problem-notification.yml

Triggers a Tableau Server extract refresh for a given workbook and posts the completion status to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Tableau Workbook Refresh Trigger
  description: Triggers a Tableau Server extract refresh for a given workbook and posts the completion status to a Microsoft Teams channel.
  tags:
  - analytics
  - reporting
  - tableau
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: refresh-tableau-workbook
      description: Given a Tableau workbook ID, trigger an extract refresh and notify a Teams channel when complete.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: Tableau workbook ID.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for notification.
      steps:
      - name: trigger-refresh
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: '{{workbook_id}}'
      - name: notify-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Tableau workbook {{workbook_id}} refresh triggered. Job ID: {{trigger-refresh.job.id}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.adobe.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/{{site_id}}/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → tableau-workbook-refresh-trigger.yml

Checks a GitHub repository for branch protection, CODEOWNERS file, and required status checks, then posts a compliance summary to Slack.

naftiko: '0.5'
info:
  label: GitHub Repo Compliance Check
  description: Checks a GitHub repository for branch protection, CODEOWNERS file, and required status checks, then posts a compliance summary to Slack.
  tags:
  - engineering
  - compliance
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: eng-compliance
    port: 8080
    tools:
    - name: check-repo-compliance
      description: Given a GitHub repository name, verify branch protection rules, CODEOWNERS presence, and required status checks. Posts a compliance summary to the security Slack channel.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name in org/repo format.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for compliance report.
      steps:
      - name: get-branch-protection
        type: call
        call: github.get-branch-protection
        with:
          repo: '{{repo_name}}'
          branch: main
      - name: get-codeowners
        type: call
        call: github.get-file
        with:
          repo: '{{repo_name}}'
          path: CODEOWNERS
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Compliance check for {{repo_name}}: Branch protection={{get-branch-protection.enabled}}, CODEOWNERS={{get-codeowners.exists}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branch-protection
      path: /repos/{{repo}}/branches/{{branch}}/protection
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch-protection
        method: GET
    - name: contents
      path: /repos/{{repo}}/contents/{{path}}
      inputParameters:
      - name: repo
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        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-repo-compliance-check.yml

Fetches the latest status update from an Asana project and posts it to the project's Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Asana Project Status Sync
  description: Fetches the latest status update from an Asana project and posts it to the project's Microsoft Teams channel.
  tags:
  - project-management
  - collaboration
  - asana
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pm-ops
    port: 8080
    tools:
    - name: sync-project-status
      description: Given an Asana project GID, fetch the latest status update and post it to a Teams channel.
      inputParameters:
      - name: project_gid
        in: body
        type: string
        description: Asana project GID.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID.
      steps:
      - name: get-status
        type: call
        call: asana.get-project-status
        with:
          project_gid: '{{project_gid}}'
      - name: post-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Asana project status: {{get-status.color}} — {{get-status.text}}'
  consumes:
  - type: http
    namespace: asana
    baseUri: https://app.asana.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.asana_token
    resources:
    - name: project-statuses
      path: /projects/{{project_gid}}/project_statuses
      inputParameters:
      - name: project_gid
        in: path
      operations:
      - name: get-project-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → asana-project-status-sync.yml

Retrieves Adobe's LinkedIn campaign performance metrics, enriches Marketo lead records with engagement signals, and posts a weekly digest to the social media Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Social Campaign Performance
  description: Retrieves Adobe's LinkedIn campaign performance metrics, enriches Marketo lead records with engagement signals, and posts a weekly digest to the social media Teams channel.
  tags:
  - marketing
  - social
  - linkedin
  - marketo
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: social-analytics
    port: 8080
    tools:
    - name: digest-linkedin-campaign
      description: Given a LinkedIn campaign ID and Marketo program ID, retrieve campaign impressions, clicks, and conversion data from LinkedIn, enrich Marketo with engagement signals, and post a digest to the social media Teams channel. Use weekly to review LinkedIn campaign performance.
      inputParameters:
      - name: linkedin_campaign_id
        in: body
        type: string
        description: LinkedIn campaign ID to retrieve metrics for.
      - name: marketo_program_id
        in: body
        type: string
        description: Marketo program ID to update with engagement data.
      - name: social_channel_id
        in: body
        type: string
        description: Social media Teams channel ID.
      steps:
      - name: get-linkedin-metrics
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{linkedin_campaign_id}}'
      - name: update-marketo-program
        type: call
        call: marketo-social.update-program
        with:
          program_id: '{{marketo_program_id}}'
          impressions: '{{get-linkedin-metrics.impressions}}'
          clicks: '{{get-linkedin-metrics.clicks}}'
          conversions: '{{get-linkedin-metrics.conversions}}'
      - name: post-digest
        type: call
        call: msteams-social.post-channel-message
        with:
          channel_id: '{{social_channel_id}}'
          text: 'LinkedIn Campaign {{linkedin_campaign_id}}: {{get-linkedin-metrics.impressions}} impressions | {{get-linkedin-metrics.clicks}} clicks | {{get-linkedin-metrics.conversions}} conversions | CTR: {{get-linkedin-metrics.ctr}}%'
  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
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: marketo-social
    baseUri: https://adobe.mktorest.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.marketo_token
    resources:
    - name: programs
      path: /programs/{{program_id}}.json
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: update-program
        method: POST
  - type: http
    namespace: msteams-social
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → linkedin-social-campaign-performance.yml

When a P1 ServiceNow incident is created, triggers a PagerDuty alert and updates the ServiceNow incident with the PagerDuty incident URL.

naftiko: '0.5'
info:
  label: ServiceNow Incident to PagerDuty
  description: When a P1 ServiceNow incident is created, triggers a PagerDuty alert and updates the ServiceNow incident with the PagerDuty incident URL.
  tags:
  - it-operations
  - incident-management
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: incident-ops
    port: 8080
    tools:
    - name: escalate-to-pagerduty
      description: Given a ServiceNow incident number, create a PagerDuty incident and update ServiceNow with the PagerDuty link.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      - name: service_id
        in: body
        type: string
        description: PagerDuty service ID to alert.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: create-pd-incident
        type: call
        call: pagerduty.create-incident
        with:
          service_id: '{{service_id}}'
          title: '{{get-incident.short_description}}'
          urgency: high
      - name: update-snow
        type: call
        call: servicenow.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          pagerduty_url: '{{create-pd-incident.html_url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://adobe.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
      - name: update-incident
        method: PATCH
  - 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
Open in Framework → View in Fleet → servicenow-incident-to-pagerduty.yml

Creates a ServiceNow change request for planned maintenance and notifies the CAB Teams channel for approval.

naftiko: '0.5'
info:
  label: IT Change Management Request Submission
  description: Creates a ServiceNow change request for planned maintenance and notifies the CAB Teams channel for approval.
  tags:
  - itsm
  - change-management
  - servicenow
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Given a change description and planned maintenance window, create a ServiceNow change request and notify the CAB Teams channel. Use when engineering teams need to schedule planned maintenance on Adobe production systems.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the planned change.
      - name: description
        in: body
        type: string
        description: Full change details including rollback plan and systems affected.
      - name: planned_start
        in: body
        type: string
        description: Planned start time in ISO 8601 format.
      - name: planned_end
        in: body
        type: string
        description: Planned end time in ISO 8601 format.
      - name: cab_channel_id
        in: body
        type: string
        description: CAB Teams channel ID.
      steps:
      - name: create-change
        type: call
        call: servicenow-change.create-change-request
        with:
          short_description: '{{short_description}}'
          description: '{{description}}'
          start_date: '{{planned_start}}'
          end_date: '{{planned_end}}'
      - name: notify-cab
        type: call
        call: msteams-cab.post-channel-message
        with:
          channel_id: '{{cab_channel_id}}'
          text: 'Change Request {{create-change.number}}: {{short_description}} | Window: {{planned_start}} to {{planned_end}} | Awaiting CAB approval'
  consumes:
  - type: http
    namespace: servicenow-change
    baseUri: https://adobe.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-cab
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → it-change-management-request-submission.yml

Retrieves the latest build status for an Azure DevOps pipeline and returns the result, duration, and commit SHA.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Check
  description: Retrieves the latest build status for an Azure DevOps pipeline and returns the result, duration, and commit SHA.
  tags:
  - engineering
  - cicd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: cicd-ops
    port: 8080
    tools:
    - name: get-build-status
      description: Given an Azure DevOps project and pipeline ID, return the latest build result, duration, and source commit. Use for deployment readiness checks.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline definition ID.
      call: azdo.get-latest-build
      with:
        project: '{{project}}'
        definition_id: '{{pipeline_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.value[0].result
      - name: duration
        type: string
        mapping: $.value[0].duration
      - name: commit
        type: string
        mapping: $.value[0].sourceVersion
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/adobe
    authentication:
      type: basic
      username: ''
      password: $secrets.azdo_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds
      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-status-check.yml

Checks material availability in SAP S/4HANA by material number and plant, returning available quantity and next replenishment date.

naftiko: '0.5'
info:
  label: SAP Material Availability Check
  description: Checks material availability in SAP S/4HANA by material number and plant, returning available quantity and next replenishment date.
  tags:
  - supply-chain
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: scm-ops
    port: 8080
    tools:
    - name: check-material-availability
      description: Given a SAP material number and plant, return available stock quantity and next replenishment date.
      inputParameters:
      - name: material
        in: body
        type: string
        description: SAP material number.
      - name: plant
        in: body
        type: string
        description: SAP plant code.
      call: sap.get-material-stock
      with:
        material: '{{material}}'
        plant: '{{plant}}'
      outputParameters:
      - name: available_qty
        type: number
        mapping: $.d.AvailableQuantity
      - name: unit
        type: string
        mapping: $.d.BaseUnit
      - name: next_replenishment
        type: string
        mapping: $.d.NextReplenishmentDate
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adobe-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}}',Plant='{{plant}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-material-stock
        method: GET
Open in Framework → View in Fleet → sap-material-availability-check.yml

Sends user-generated content to the OpenAI moderation endpoint and, if flagged, creates a Zendesk moderation ticket.

naftiko: '0.5'
info:
  label: OpenAI Content Moderation
  description: Sends user-generated content to the OpenAI moderation endpoint and, if flagged, creates a Zendesk moderation ticket.
  tags:
  - content-safety
  - ai
  - openai
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: trust-safety
    port: 8080
    tools:
    - name: moderate-content
      description: Given user-generated text, run it through OpenAI moderation. If flagged, create a Zendesk moderation review ticket.
      inputParameters:
      - name: content
        in: body
        type: string
        description: User-generated content to moderate.
      - name: user_id
        in: body
        type: string
        description: User ID who submitted the content.
      steps:
      - name: check-moderation
        type: call
        call: openai.create-moderation
        with:
          input: '{{content}}'
      - name: create-ticket
        type: call
        call: zendesk.create-ticket
        with:
          subject: Content moderation flag — user {{user_id}}
          description: 'Flagged categories: {{check-moderation.results[0].categories}}'
          priority: high
  consumes:
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: moderations
      path: /moderations
      operations:
      - name: create-moderation
        method: POST
  - type: http
    namespace: zendesk
    baseUri: https://adobe.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 → openai-content-moderation.yml

When a GitHub Actions workflow fails on a protected branch, creates a Jira bug, posts a Datadog deployment marker, and alerts the engineering Teams channel.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Handler
  description: When a GitHub Actions workflow fails on a protected branch, creates a Jira bug, posts a Datadog deployment marker, and alerts the engineering Teams channel.
  tags:
  - devops
  - cicd
  - github
  - jira
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: devops-ci
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions failure event with repo, branch, commit, and workflow details, open a Jira bug, create a Datadog error event, and post an alert to the engineering Teams channel. Use when a protected-branch CI pipeline fails.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository full name, e.g. 'adobe/creative-cloud-api'.
      - name: branch
        in: body
        type: string
        description: Branch where the failure occurred.
      - name: commit_sha
        in: body
        type: string
        description: Failing commit SHA.
      - name: workflow_name
        in: body
        type: string
        description: Name of the failed GitHub Actions workflow.
      - name: run_url
        in: body
        type: string
        description: URL to the failed workflow run.
      - name: eng_channel_id
        in: body
        type: string
        description: Engineering Teams channel ID.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}'
          description: 'Commit: {{commit_sha}}

            Run: {{run_url}}'
      - name: log-dd-event
        type: call
        call: datadog.create-event
        with:
          title: 'CI Failure: {{repo}} — {{branch}}'
          text: Commit {{commit_sha}} | Workflow {{workflow_name}}
          alert_type: error
      - name: alert-eng
        type: call
        call: msteams-eng.post-channel-message
        with:
          channel_id: '{{eng_channel_id}}'
          text: 'CI Failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}} | Run: {{run_url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://adobe.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: 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-eng
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → github-ci-cd-pipeline-failure-handler.yml

Checks the replication status of a SAP HANA system replication and posts the status to the DBA Microsoft Teams channel.

naftiko: '0.5'
info:
  label: SAP HANA Data Replication Status
  description: Checks the replication status of a SAP HANA system replication and posts the status to the DBA Microsoft Teams channel.
  tags:
  - data
  - database
  - sap-hana
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dba-ops
    port: 8080
    tools:
    - name: check-replication-status
      description: Query SAP HANA system replication status and post the result to the DBA Teams channel.
      inputParameters:
      - name: hana_host
        in: body
        type: string
        description: SAP HANA host identifier.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams DBA channel ID.
      steps:
      - name: get-status
        type: call
        call: hana.get-replication-status
        with:
          host: '{{hana_host}}'
      - name: notify-dba
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'HANA replication for {{hana_host}}: mode={{get-status.replication_mode}}, status={{get-status.replication_status}}'
  consumes:
  - type: http
    namespace: hana
    baseUri: https://{{hana_host}}:8443/api/v1
    authentication:
      type: basic
      username: $secrets.hana_user
      password: $secrets.hana_password
    resources:
    - name: replication
      path: /system_replication
      operations:
      - name: get-replication-status
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → sap-hana-data-replication-status.yml

Retrieves DNS records for a Cloudflare zone by record type and name.

naftiko: '0.5'
info:
  label: Cloudflare DNS Record Lookup
  description: Retrieves DNS records for a Cloudflare zone by record type and name.
  tags:
  - infrastructure
  - networking
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: get-dns-records
      description: Given a Cloudflare zone ID and record name, return matching DNS records with type, content, and TTL.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      - name: record_name
        in: body
        type: string
        description: DNS record name to look up.
      call: cloudflare.list-dns-records
      with:
        zone_id: '{{zone_id}}'
        name: '{{record_name}}'
      outputParameters:
      - name: records
        type: array
        mapping: $.result[*]
  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
      inputParameters:
      - name: zone_id
        in: path
      - name: name
        in: query
      operations:
      - name: list-dns-records
        method: GET
Open in Framework → View in Fleet → cloudflare-dns-record-lookup.yml

When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions their Okta account, and sends a Microsoft Teams welcome message.

naftiko: '0.5'
info:
  label: New Employee Onboarding Orchestration
  description: When a new employee is created in Workday, opens a ServiceNow onboarding ticket, provisions their Okta account, and sends a Microsoft Teams welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - okta
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-employee-onboarding
      description: Given a Workday employee ID and start date, create a ServiceNow onboarding task, provision their Okta account, and send a Teams welcome message. Use when HR confirms a new hire in Workday.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID for the new hire.
      - name: start_date
        in: body
        type: string
        description: Employee start date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Onboarding: {{get-employee.first_name}} {{get-employee.last_name}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
      - name: provision-okta
        type: call
        call: okta.create-user
        with:
          firstName: '{{get-employee.first_name}}'
          lastName: '{{get-employee.last_name}}'
          email: '{{get-employee.work_email}}'
          login: '{{get-employee.work_email}}'
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Welcome to Adobe, {{get-employee.first_name}}! Your onboarding ticket: {{create-ticket.number}}. Start date: {{start_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: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adobe.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: okta
    baseUri: https://adobe.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    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.msteams_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-orchestration.yml

Retrieves the running status, instance type, and uptime for an AWS EC2 instance by instance ID.

naftiko: '0.5'
info:
  label: AWS EC2 Instance Status Check
  description: Retrieves the running status, instance type, and uptime for an AWS EC2 instance by instance ID.
  tags:
  - cloud
  - infrastructure
  - aws
  - ec2
capability:
  exposes:
  - type: mcp
    namespace: cloud-ops
    port: 8080
    tools:
    - name: get-ec2-status
      description: Given an EC2 instance ID, return the instance state, type, availability zone, and launch time. Use for infrastructure health checks.
      inputParameters:
      - name: instance_id
        in: body
        type: string
        description: AWS EC2 instance ID.
      call: aws-ec2.describe-instance
      with:
        instance_id: '{{instance_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.Reservations[0].Instances[0].State.Name
      - name: instance_type
        type: string
        mapping: $.Reservations[0].Instances[0].InstanceType
      - name: availability_zone
        type: string
        mapping: $.Reservations[0].Instances[0].Placement.AvailabilityZone
  consumes:
  - type: http
    namespace: aws-ec2
    baseUri: https://ec2.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: instances
      path: /
      inputParameters:
      - name: instance_id
        in: query
      operations:
      - name: describe-instance
        method: GET
Open in Framework → View in Fleet → aws-ec2-instance-status-check.yml

Retrieves a supplier risk profile from SAP Ariba and, if the risk score exceeds the threshold, creates a ServiceNow task and alerts the procurement Slack channel.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Risk Assessment
  description: Retrieves a supplier risk profile from SAP Ariba and, if the risk score exceeds the threshold, creates a ServiceNow task and alerts the procurement Slack channel.
  tags:
  - procurement
  - risk
  - sap-ariba
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: procurement-risk
    port: 8080
    tools:
    - name: assess-supplier-risk
      description: Given a SAP Ariba supplier ID and risk threshold, fetch the risk profile. If the score exceeds the threshold, create a ServiceNow remediation task and post to the procurement Slack channel.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: SAP Ariba supplier ID.
      - name: risk_threshold
        in: body
        type: number
        description: Risk score threshold (0-100).
      steps:
      - name: get-risk-profile
        type: call
        call: ariba.get-supplier-risk
        with:
          supplier_id: '{{supplier_id}}'
      - name: create-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'High-risk supplier: {{supplier_id}} (score: {{get-risk-profile.risk_score}})'
          category: Procurement
          priority: '2'
      - name: alert-procurement
        type: call
        call: slack.post-message
        with:
          channel: procurement-alerts
          text: 'Supplier {{supplier_id}} risk score {{get-risk-profile.risk_score}} exceeds threshold {{risk_threshold}}. ServiceNow: {{create-task.number}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-risk/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: suppliers
      path: /suppliers/{{supplier_id}}/risk
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier-risk
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adobe.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-ariba-supplier-risk-assessment.yml

Retrieves a Salesforce contact by email address, returning name, title, account, and phone number.

naftiko: '0.5'
info:
  label: Salesforce Contact Lookup
  description: Retrieves a Salesforce contact by email address, returning name, title, account, and phone number.
  tags:
  - sales
  - crm
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm-ops
    port: 8080
    tools:
    - name: lookup-contact
      description: Given an email address, look up the matching Salesforce contact and return name, title, account name, and phone. Use for quick contact verification.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Contact email address.
      call: salesforce.query-contact
      with:
        q: SELECT Id, Name, Title, Account.Name, Phone FROM Contact WHERE Email = '{{email}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.records[0].Name
      - name: title
        type: string
        mapping: $.records[0].Title
      - name: account
        type: string
        mapping: $.records[0].Account.Name
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adobe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query-contact
        method: GET
Open in Framework → View in Fleet → salesforce-contact-lookup.yml

When GitHub Advanced Security detects a critical CVE, creates a Jira security ticket, logs a Datadog event, and alerts the security engineering Teams channel.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Triage
  description: When GitHub Advanced Security detects a critical CVE, creates a Jira security ticket, logs a Datadog event, and alerts the security engineering Teams channel.
  tags:
  - security
  - github
  - devops
  - jira
  - vulnerability
capability:
  exposes:
  - type: mcp
    namespace: sec-vuln
    port: 8080
    tools:
    - name: triage-security-alert
      description: Given a GitHub security alert with CVE, severity, and affected package, create a high-priority Jira security ticket, log a Datadog error event, and alert the security engineering Teams channel. Use when GitHub Advanced Security finds a critical CVE in an Adobe repo.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository full name.
      - name: cve_id
        in: body
        type: string
        description: CVE identifier.
      - name: severity
        in: body
        type: string
        description: 'Severity: critical, high, medium, or low.'
      - name: package_name
        in: body
        type: string
        description: Affected package name.
      - name: sec_channel_id
        in: body
        type: string
        description: Security engineering Teams channel ID.
      steps:
      - name: create-sec-ticket
        type: call
        call: jira-sec.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: '[{{severity}}] {{cve_id}} in {{repo}} — {{package_name}}'
          description: 'CVE: {{cve_id}} | Package: {{package_name}} | Severity: {{severity}}'
          priority: Highest
      - name: log-dd-event
        type: call
        call: datadog-sec.create-event
        with:
          title: 'Security: {{cve_id}} in {{repo}}'
          text: 'Package {{package_name}} | Severity: {{severity}} | Jira: {{create-sec-ticket.key}}'
          alert_type: error
      - name: alert-sec-team
        type: call
        call: msteams-sec.post-channel-message
        with:
          channel_id: '{{sec_channel_id}}'
          text: 'SECURITY: {{severity}} CVE {{cve_id}} in {{repo}} / {{package_name}} | Jira: {{create-sec-ticket.key}} | Datadog: {{log-dd-event.url}}'
  consumes:
  - type: http
    namespace: jira-sec
    baseUri: https://adobe.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: datadog-sec
    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-sec
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → github-security-vulnerability-triage.yml

When a Gainsight customer health score drops below threshold, creates a Salesforce task for the CSM and alerts the customer-success Slack channel.

naftiko: '0.5'
info:
  label: Gainsight Health Score Alert
  description: When a Gainsight customer health score drops below threshold, creates a Salesforce task for the CSM and alerts the customer-success Slack channel.
  tags:
  - customer-success
  - crm
  - gainsight
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cs-ops
    port: 8080
    tools:
    - name: alert-low-health-score
      description: Given a Gainsight company ID and health score threshold, check the score. If below threshold, create a Salesforce CSM task and notify Slack.
      inputParameters:
      - name: company_id
        in: body
        type: string
        description: Gainsight company ID.
      - name: threshold
        in: body
        type: number
        description: Health score threshold.
      steps:
      - name: get-health
        type: call
        call: gainsight.get-company-health
        with:
          company_id: '{{company_id}}'
      - name: create-sf-task
        type: call
        call: salesforce.create-task
        with:
          subject: 'Low health score alert: {{company_id}} ({{get-health.score}})'
          priority: High
      - name: notify-cs
        type: call
        call: slack.post-message
        with:
          channel: customer-success
          text: 'Health score alert: {{company_id}} dropped to {{get-health.score}} (threshold: {{threshold}})'
  consumes:
  - type: http
    namespace: gainsight
    baseUri: https://adobe.gainsightcloud.com/v1
    authentication:
      type: bearer
      token: $secrets.gainsight_token
    resources:
    - name: companies
      path: /data/objects/Company/{{company_id}}
      inputParameters:
      - name: company_id
        in: path
      operations:
      - name: get-company-health
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://adobe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → gainsight-health-score-alert.yml

Aggregates Marketo campaign engagement metrics, publishes a refreshed Power BI marketing dashboard, and emails the weekly campaign digest to the marketing team.

naftiko: '0.5'
info:
  label: Marketo Campaign Performance Digest
  description: Aggregates Marketo campaign engagement metrics, publishes a refreshed Power BI marketing dashboard, and emails the weekly campaign digest to the marketing team.
  tags:
  - marketing
  - marketo
  - power-bi
  - reporting
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: mkt-reporting
    port: 8080
    tools:
    - name: digest-campaign-performance
      description: Given a Marketo campaign ID and Power BI dataset ID, retrieve campaign performance metrics from Marketo, trigger a Power BI refresh, and email a digest to the marketing leadership. Use weekly for campaign performance reviews.
      inputParameters:
      - name: marketo_program_id
        in: body
        type: string
        description: Marketo program ID to retrieve metrics for.
      - name: pbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the marketing dashboard.
      - name: marketing_email
        in: body
        type: string
        description: Marketing leadership email distribution list.
      steps:
      - name: get-campaign-metrics
        type: call
        call: marketo.get-program-metrics
        with:
          program_id: '{{marketo_program_id}}'
      - name: refresh-mkt-pbi
        type: call
        call: powerbi-mkt.trigger-refresh
        with:
          dataset_id: '{{pbi_dataset_id}}'
      - name: send-digest
        type: call
        call: msgraph-mkt.send-email
        with:
          to: '{{marketing_email}}'
          subject: Campaign Performance Digest — Program {{marketo_program_id}}
          body: 'Emails sent: {{get-campaign-metrics.emails_sent}} | Open rate: {{get-campaign-metrics.open_rate}}% | Clicks: {{get-campaign-metrics.clicks}} | Dashboard refreshed.'
  consumes:
  - type: http
    namespace: marketo
    baseUri: https://adobe.mktorest.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.marketo_token
    resources:
    - name: program-metrics
      path: /stats/programs/{{program_id}}/detail.json
      inputParameters:
      - name: program_id
        in: path
      operations:
      - name: get-program-metrics
        method: GET
  - type: http
    namespace: powerbi-mkt
    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: trigger-refresh
        method: POST
  - type: http
    namespace: msgraph-mkt
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender}}/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → marketo-campaign-performance-digest.yml

Triggers a GitHub Actions workflow dispatch event and posts the run URL to a Slack channel for visibility.

naftiko: '0.5'
info:
  label: GitHub Actions Workflow Trigger
  description: Triggers a GitHub Actions workflow dispatch event and posts the run URL to a Slack channel for visibility.
  tags:
  - engineering
  - cicd
  - github
  - github-actions
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cicd-ops
    port: 8080
    tools:
    - name: trigger-workflow
      description: Given a GitHub repo and workflow file name, trigger a workflow dispatch and post the run URL to Slack.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in org/repo format.
      - name: workflow_id
        in: body
        type: string
        description: Workflow file name (e.g., deploy.yml).
      - name: ref
        in: body
        type: string
        description: Git ref to run against.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for notification.
      steps:
      - name: dispatch-workflow
        type: call
        call: github.create-workflow-dispatch
        with:
          repo: '{{repo}}'
          workflow_id: '{{workflow_id}}'
          ref: '{{ref}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'GitHub Actions workflow {{workflow_id}} triggered on {{repo}} (ref: {{ref}})'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-dispatches
      path: /repos/{{repo}}/actions/workflows/{{workflow_id}}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: create-workflow-dispatch
        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 → github-actions-workflow-trigger.yml

Moves documents older than a retention threshold from a SharePoint library to an archive site and logs the action.

naftiko: '0.5'
info:
  label: SharePoint Document Archival
  description: Moves documents older than a retention threshold from a SharePoint library to an archive site and logs the action.
  tags:
  - governance
  - document-management
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: doc-governance
    port: 8080
    tools:
    - name: archive-documents
      description: Given a SharePoint site ID and library name, move documents past the retention period to the archive site.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: library_name
        in: body
        type: string
        description: Document library name.
      - name: retention_days
        in: body
        type: integer
        description: Retention period in days.
      steps:
      - name: list-old-docs
        type: call
        call: sharepoint.list-items
        with:
          site_id: '{{site_id}}'
          library: '{{library_name}}'
          filter: createdDateTime lt {{retention_days}}
      - name: move-to-archive
        type: call
        call: sharepoint.move-items
        with:
          items: '{{list-old-docs.value}}'
          destination: archive
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/items
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: list-items
        method: GET
      - name: move-items
        method: PATCH
Open in Framework → View in Fleet → sharepoint-document-archival.yml

Queries SAP Concur for unsubmitted expense reports older than 14 days and sends reminder emails via Microsoft Graph.

naftiko: '0.5'
info:
  label: SAP Concur Expense Submission Reminder
  description: Queries SAP Concur for unsubmitted expense reports older than 14 days and sends reminder emails via Microsoft Graph.
  tags:
  - finance
  - expense-management
  - sap-concur
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: send-expense-reminders
      description: Fetch all unsubmitted SAP Concur expense reports older than a given threshold and send email reminders to report owners via Microsoft Graph.
      inputParameters:
      - name: days_threshold
        in: body
        type: integer
        description: Number of days after which to flag unsubmitted reports.
      steps:
      - name: get-unsubmitted
        type: call
        call: concur.list-reports
        with:
          status: UNSUBMITTED
          older_than_days: '{{days_threshold}}'
      - name: send-reminders
        type: call
        call: msgraph.send-mail
        with:
          recipients: '{{get-unsubmitted.owner_emails}}'
          subject: 'Action Required: Submit Your Expense Report'
          body: You have an unsubmitted expense report older than {{days_threshold}} days. Please submit it in SAP Concur.
  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
      operations:
      - name: list-reports
        method: GET
  - 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 → sap-concur-expense-submission-reminder.yml

When a Jira bug is marked resolved, auto-generates a Confluence knowledge base article with the resolution details and posts it to the support Teams channel.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Article Creation from Jira
  description: When a Jira bug is marked resolved, auto-generates a Confluence knowledge base article with the resolution details and posts it to the support Teams channel.
  tags:
  - devops
  - jira
  - confluence
  - knowledge-management
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: kb-ops
    port: 8080
    tools:
    - name: create-kb-article-from-bug
      description: Given a resolved Jira issue key and Confluence space key, retrieve the issue resolution details, create a Confluence knowledge base article documenting the fix, and post a link to the support Teams channel. Use when a significant customer-facing bug is resolved.
      inputParameters:
      - name: jira_issue_key
        in: body
        type: string
        description: Resolved Jira issue key, e.g. 'CC-1234'.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for the knowledge base.
      - name: support_channel_id
        in: body
        type: string
        description: Support Teams channel ID.
      steps:
      - name: get-issue
        type: call
        call: jira-kb.get-issue
        with:
          issue_key: '{{jira_issue_key}}'
      - name: create-article
        type: call
        call: confluence-kb.create-page
        with:
          space_key: '{{confluence_space_key}}'
          title: 'KB: {{get-issue.summary}}'
          body: 'Issue: {{jira_issue_key}}


            Summary: {{get-issue.summary}}


            Resolution: {{get-issue.resolution}}


            Workaround: {{get-issue.workaround}}'
      - name: notify-support
        type: call
        call: msteams-kb.post-channel-message
        with:
          channel_id: '{{support_channel_id}}'
          text: 'New KB article created from {{jira_issue_key}}: {{get-issue.summary}} | Confluence: {{create-article.url}}'
  consumes:
  - type: http
    namespace: jira-kb
    baseUri: https://adobe.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-kb
    baseUri: https://adobe.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams-kb
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → confluence-knowledge-base-article-creation-from-jira.yml

Retrieves the status of a DocuSign envelope by envelope ID, returning signer status and completion date.

naftiko: '0.5'
info:
  label: DocuSign Envelope Status Check
  description: Retrieves the status of a DocuSign envelope by envelope ID, returning signer status and completion date.
  tags:
  - legal
  - document-signing
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: legal-ops
    port: 8080
    tools:
    - name: get-envelope-status
      description: Given a DocuSign envelope ID, return the envelope status, list of signer statuses, and completion timestamp.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: DocuSign envelope ID.
      call: docusign.get-envelope
      with:
        envelope_id: '{{envelope_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: signers
        type: array
        mapping: $.recipients.signers[*].status
      - name: completed_date
        type: string
        mapping: $.completedDateTime
  consumes:
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id
    authentication:
      type: bearer
      token: $secrets.docusign_token
    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-check.yml

Retrieves an invoice record from Oracle E-Business Suite by invoice number, returning status, amount, and payment date.

naftiko: '0.5'
info:
  label: Oracle EBS Invoice Status Lookup
  description: Retrieves an invoice record from Oracle E-Business Suite by invoice number, returning status, amount, and payment date.
  tags:
  - finance
  - erp
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: get-invoice-status
      description: Given an Oracle EBS invoice number, return the invoice status, total amount, and scheduled payment date.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: Oracle EBS invoice number.
      call: oracle-ebs.get-invoice
      with:
        invoice_num: '{{invoice_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.InvoiceStatus
      - name: amount
        type: number
        mapping: $.InvoiceAmount
      - name: payment_date
        type: string
        mapping: $.ScheduledPaymentDate
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://adobe-ebs.oracle.com/webservices/rest/AP_INVOICES
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: invoices
      path: /{{invoice_num}}
      inputParameters:
      - name: invoice_num
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → oracle-ebs-invoice-status-lookup.yml

Retrieves Okta privileged group membership, triggers a Power BI access review report refresh, and emails the security team for certification.

naftiko: '0.5'
info:
  label: Okta Quarterly Privileged Access Review
  description: Retrieves Okta privileged group membership, triggers a Power BI access review report refresh, and emails the security team for certification.
  tags:
  - identity
  - security
  - okta
  - compliance
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-privileged-access-review
      description: Given an Okta group ID and Power BI dataset ID, pull current group membership, trigger a Power BI refresh, and email the certification report to the security team. Use quarterly for privileged access reviews.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: Okta group ID to certify.
      - name: pbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for access certification reports.
      - name: security_team_email
        in: body
        type: string
        description: Security team email for the review.
      steps:
      - name: get-group-members
        type: call
        call: okta-review.get-group-users
        with:
          group_id: '{{okta_group_id}}'
      - name: refresh-pbi
        type: call
        call: powerbi-review.trigger-refresh
        with:
          dataset_id: '{{pbi_dataset_id}}'
      - name: send-cert-email
        type: call
        call: msgraph-review.send-email
        with:
          to: '{{security_team_email}}'
          subject: Quarterly Access Review — Okta Group {{okta_group_id}}
          body: Group {{okta_group_id}} has {{get-group-members.total_count}} members. Review in Power BI and certify or revoke access.
  consumes:
  - type: http
    namespace: okta-review
    baseUri: https://adobe.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: group-users
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: get-group-users
        method: GET
  - type: http
    namespace: powerbi-review
    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: trigger-refresh
        method: POST
  - type: http
    namespace: msgraph-review
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender}}/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → okta-quarterly-privileged-access-review.yml

Validates incoming SAP Ariba invoices against open purchase orders and routes exceptions to the accounts payable team via ServiceNow.

naftiko: '0.5'
info:
  label: SAP Ariba Invoice Processing
  description: Validates incoming SAP Ariba invoices against open purchase orders and routes exceptions to the accounts payable team via ServiceNow.
  tags:
  - finance
  - procurement
  - sap-ariba
  - accounts-payable
  - erp
capability:
  exposes:
  - type: mcp
    namespace: ap-ops
    port: 8080
    tools:
    - name: process-ariba-invoice
      description: Given an SAP Ariba invoice ID and PO number, retrieve and compare both documents, then create a ServiceNow approval task for AP review. Use when processing incoming supplier invoices requiring three-way match.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: SAP Ariba invoice ID.
      - name: po_number
        in: body
        type: string
        description: Related 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-erp.get-purchase-order
        with:
          po_number: '{{po_number}}'
      - name: create-approval
        type: call
        call: servicenow-ap.create-task
        with:
          short_description: 'Invoice match: {{invoice_id}} vs PO {{po_number}}'
          description: 'Invoice total: {{get-invoice.total_amount}} | PO total: {{get-po.total_amount}} | Vendor: {{get-invoice.vendor_name}}'
          assigned_group: AP_Team
  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-erp
    baseUri: https://adobe-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: servicenow-ap
    baseUri: https://adobe.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-ariba-invoice-processing.yml

Takes a snapshot of a Datadog dashboard and posts the image URL to a Microsoft Teams channel for stakeholder review.

naftiko: '0.5'
info:
  label: Datadog Dashboard Snapshot
  description: Takes a snapshot of a Datadog dashboard and posts the image URL to a Microsoft Teams channel for stakeholder review.
  tags:
  - monitoring
  - reporting
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: snapshot-dashboard
      description: Given a Datadog dashboard ID, take a PNG snapshot and post the image link to a Teams channel.
      inputParameters:
      - name: dashboard_id
        in: body
        type: string
        description: Datadog dashboard ID.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID.
      steps:
      - name: take-snapshot
        type: call
        call: datadog.create-snapshot
        with:
          graph_def: '{{dashboard_id}}'
      - name: post-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Datadog dashboard snapshot: {{take-snapshot.snapshot_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: snapshots
      path: /graph/snapshot
      operations:
      - name: create-snapshot
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → datadog-dashboard-snapshot.yml

Retrieves the send report for a Mailchimp campaign, returning open rate, click rate, and total recipients.

naftiko: '0.5'
info:
  label: Mailchimp Campaign Send Report
  description: Retrieves the send report for a Mailchimp campaign, returning open rate, click rate, and total recipients.
  tags:
  - marketing
  - email
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: email-ops
    port: 8080
    tools:
    - name: get-campaign-report
      description: Given a Mailchimp campaign ID, return open rate, click rate, unsubscribe count, and total recipients.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: Mailchimp campaign ID.
      call: mailchimp.get-report
      with:
        campaign_id: '{{campaign_id}}'
      outputParameters:
      - name: open_rate
        type: number
        mapping: $.opens.open_rate
      - name: click_rate
        type: number
        mapping: $.clicks.click_rate
      - name: total_recipients
        type: integer
        mapping: $.emails_sent
  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-report
        method: GET
Open in Framework → View in Fleet → mailchimp-campaign-send-report.yml

Creates a new Confluence page in a given space using a predefined template and notifies the author via Slack.

naftiko: '0.5'
info:
  label: Confluence Page Creation from Template
  description: Creates a new Confluence page in a given space using a predefined template and notifies the author via Slack.
  tags:
  - documentation
  - collaboration
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: docs-ops
    port: 8080
    tools:
    - name: create-page-from-template
      description: Given a Confluence space key, template name, and page title, create a new page and notify the author on Slack.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: template_name
        in: body
        type: string
        description: Template name to use for the new page.
      - name: page_title
        in: body
        type: string
        description: Title for the new Confluence page.
      - name: author_slack_id
        in: body
        type: string
        description: Slack user ID of the page author.
      steps:
      - name: create-page
        type: call
        call: confluence.create-content
        with:
          space_key: '{{space_key}}'
          title: '{{page_title}}'
          template: '{{template_name}}'
      - name: notify-author
        type: call
        call: slack.post-message
        with:
          channel: '{{author_slack_id}}'
          text: 'Your Confluence page ''{{page_title}}'' has been created: {{create-page.url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://adobe.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-content
        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 → confluence-page-creation-from-template.yml

When a Kubernetes pod enters CrashLoopBackOff, captures logs via Datadog, creates a Jira ticket, and alerts the platform Slack channel.

naftiko: '0.5'
info:
  label: Kubernetes Pod Restart Handler
  description: When a Kubernetes pod enters CrashLoopBackOff, captures logs via Datadog, creates a Jira ticket, and alerts the platform Slack channel.
  tags:
  - infrastructure
  - containers
  - kubernetes
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: platform-ops
    port: 8080
    tools:
    - name: handle-pod-crash
      description: Given a Kubernetes namespace and pod name, fetch recent logs from Datadog, create a Jira investigation ticket, and alert the platform Slack channel.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: Kubernetes namespace.
      - name: pod_name
        in: body
        type: string
        description: Pod name in CrashLoopBackOff.
      steps:
      - name: fetch-logs
        type: call
        call: datadog.search-logs
        with:
          query: kube_namespace:{{namespace}} pod_name:{{pod_name}}
          limit: 50
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: PLATFORM
          issuetype: Bug
          summary: 'CrashLoopBackOff: {{pod_name}} in {{namespace}}'
          description: Pod {{pod_name}} in namespace {{namespace}} is crash-looping. Recent logs attached.
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: platform-alerts
          text: 'CrashLoopBackOff: {{pod_name}} in {{namespace}} | Jira: {{create-ticket.key}}'
  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: logs
      path: /logs/events/search
      operations:
      - name: search-logs
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adobe.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 → kubernetes-pod-restart-handler.yml

Creates a Snowflake data share for a partner account, grants access to specified schemas, and logs the provisioning event to ServiceNow.

naftiko: '0.5'
info:
  label: Snowflake Data Share Provisioning
  description: Creates a Snowflake data share for a partner account, grants access to specified schemas, and logs the provisioning event to ServiceNow.
  tags:
  - data
  - governance
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: provision-data-share
      description: Given a Snowflake database, schema, and partner account, create a data share and log the action in ServiceNow.
      inputParameters:
      - name: database
        in: body
        type: string
        description: Snowflake database name.
      - name: schema
        in: body
        type: string
        description: Schema to share.
      - name: partner_account
        in: body
        type: string
        description: Partner Snowflake account locator.
      steps:
      - name: create-share
        type: call
        call: snowflake.execute-statement
        with:
          statement: CREATE SHARE IF NOT EXISTS share_{{partner_account}}; GRANT USAGE ON DATABASE {{database}} TO SHARE share_{{partner_account}}; GRANT USAGE ON SCHEMA {{database}}.{{schema}} TO SHARE share_{{partner_account}}
      - name: log-provisioning
        type: call
        call: servicenow.create-record
        with:
          table: u_data_share_audit
          database: '{{database}}'
          schema: '{{schema}}'
          partner: '{{partner_account}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adobe.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://adobe.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 → snowflake-data-share-provisioning.yml

Scans SAP Ariba for supplier contracts expiring within 90 days, creates Jira renewal tasks, and emails contract owners.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Renewal Alert
  description: Scans SAP Ariba for supplier contracts expiring within 90 days, creates Jira renewal tasks, and emails contract owners.
  tags:
  - procurement
  - contract-management
  - sap-ariba
  - jira
capability:
  exposes:
  - type: mcp
    namespace: contract-ops
    port: 8080
    tools:
    - name: alert-expiring-contracts
      description: Given a look-ahead window in days, fetch expiring supplier contracts from SAP Ariba and create a Jira renewal task for each. Use monthly to proactively manage contract renewals for Adobe's key technology and service vendors.
      inputParameters:
      - name: days_ahead
        in: body
        type: integer
        description: Number of days ahead to scan for expiring contracts.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for procurement tasks.
      steps:
      - name: get-expiring
        type: call
        call: ariba-contracts.get-expiring-contracts
        with:
          days_ahead: '{{days_ahead}}'
      - name: create-renewal-task
        type: call
        call: jira-contracts.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: Contract renewals due within {{days_ahead}} days
          description: 'Expiring contracts: {{get-expiring.contract_ids}}'
  consumes:
  - type: http
    namespace: ariba-contracts
    baseUri: https://openapi.ariba.com/api/contract/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts
      inputParameters:
      - name: days_ahead
        in: query
      operations:
      - name: get-expiring-contracts
        method: GET
  - type: http
    namespace: jira-contracts
    baseUri: https://adobe.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 → sap-ariba-contract-renewal-alert.yml

Activates an Adobe Target A/B test activity by activity ID and logs the activation event to Snowflake for tracking.

naftiko: '0.5'
info:
  label: Adobe Target Experience Activation
  description: Activates an Adobe Target A/B test activity by activity ID and logs the activation event to Snowflake for tracking.
  tags:
  - personalization
  - experimentation
  - adobe
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cx-ops
    port: 8080
    tools:
    - name: activate-ab-test
      description: Given an Adobe Target activity ID, activate the A/B test and log the event to Snowflake.
      inputParameters:
      - name: activity_id
        in: body
        type: string
        description: Adobe Target activity ID.
      steps:
      - name: activate-activity
        type: call
        call: target.update-activity
        with:
          activity_id: '{{activity_id}}'
          state: approved
      - name: log-activation
        type: call
        call: snowflake.insert-row
        with:
          table: AB_TEST_ACTIVATIONS
          values:
            activity_id: '{{activity_id}}'
            activated_at: '{{activate-activity.modifiedAt}}'
  consumes:
  - type: http
    namespace: target
    baseUri: https://mc.adobe.io/adobe/target
    authentication:
      type: bearer
      token: $secrets.adobe_target_token
    resources:
    - name: activities
      path: /activities/ab/{{activity_id}}/state
      inputParameters:
      - name: activity_id
        in: path
      operations:
      - name: update-activity
        method: PUT
  - type: http
    namespace: snowflake
    baseUri: https://adobe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: insert-row
        method: POST
Open in Framework → View in Fleet → adobe-target-experience-activation.yml

When an employee changes teams in Workday, updates their Azure Active Directory group memberships to match the new role.

naftiko: '0.5'
info:
  label: Azure AD Group Membership Sync
  description: When an employee changes teams in Workday, updates their Azure Active Directory group memberships to match the new role.
  tags:
  - identity
  - hr
  - azure-active-directory
  - workday
capability:
  exposes:
  - type: mcp
    namespace: iam-ops
    port: 8080
    tools:
    - name: sync-ad-groups
      description: Given a Workday employee ID and new team code, fetch the required AD groups and update Azure AD memberships.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: new_team_code
        in: body
        type: string
        description: New team code from Workday.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: update-groups
        type: call
        call: azuread.update-group-membership
        with:
          user_principal_name: '{{get-employee.email}}'
          team_code: '{{new_team_code}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/adobe
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: workers
      path: /Human_Resources/v40.0/Get_Workers
      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: groups
      path: /groups
      operations:
      - name: update-group-membership
        method: POST
Open in Framework → View in Fleet → azure-ad-group-membership-sync.yml

Retrieves a lead record from Marketo and returns the current lead score, status, and last activity date.

naftiko: '0.5'
info:
  label: Marketo Lead Scoring Update
  description: Retrieves a lead record from Marketo and returns the current lead score, status, and last activity date.
  tags:
  - marketing
  - crm
  - marketo
capability:
  exposes:
  - type: mcp
    namespace: marketing-ops
    port: 8080
    tools:
    - name: get-lead-score
      description: Given a Marketo lead ID, return the current lead score, lifecycle status, and last activity timestamp. Use when sales needs to verify lead qualification before outreach.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Marketo lead ID.
      call: marketo.get-lead
      with:
        lead_id: '{{lead_id}}'
      outputParameters:
      - name: lead_score
        type: number
        mapping: $.result[0].leadScore
      - name: status
        type: string
        mapping: $.result[0].status
      - name: last_activity
        type: string
        mapping: $.result[0].lastActivityDate
  consumes:
  - type: http
    namespace: marketo
    baseUri: https://adobe-mkt.mktorest.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.marketo_access_token
    resources:
    - name: leads
      path: /lead/{{lead_id}}.json
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
Open in Framework → View in Fleet → marketo-lead-scoring-update.yml

Retrieves IT asset details from ServiceNow CMDB by asset tag, returning model, assigned user, and warranty status.

naftiko: '0.5'
info:
  label: ServiceNow IT Asset Lookup
  description: Retrieves IT asset details from ServiceNow CMDB by asset tag, returning model, assigned user, and warranty status.
  tags:
  - it-operations
  - asset-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: get-it-asset
      description: Given a ServiceNow asset tag, return model name, assigned user, location, and warranty expiry date. Use for IT support ticket triage and hardware refresh planning.
      inputParameters:
      - name: asset_tag
        in: body
        type: string
        description: ServiceNow asset tag identifier.
      call: servicenow.get-asset
      with:
        asset_tag: '{{asset_tag}}'
      outputParameters:
      - name: model
        type: string
        mapping: $.result.model_id.display_value
      - 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://adobe.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

Publishes an Adobe Launch (Experience Platform Tags) library to production and notifies the analytics team via Slack.

naftiko: '0.5'
info:
  label: Adobe Launch Rule Deployment
  description: Publishes an Adobe Launch (Experience Platform Tags) library to production and notifies the analytics team via Slack.
  tags:
  - marketing
  - tag-management
  - adobe
  - slack
capability:
  exposes:
  - type: mcp
    namespace: martech-ops
    port: 8080
    tools:
    - name: deploy-launch-library
      description: Given an Adobe Launch property ID and library ID, publish the library to production and notify the analytics Slack channel.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: Adobe Launch property ID.
      - name: library_id
        in: body
        type: string
        description: Adobe Launch library ID to publish.
      steps:
      - name: publish-library
        type: call
        call: launch.publish-library
        with:
          property_id: '{{property_id}}'
          library_id: '{{library_id}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: analytics-ops
          text: Adobe Launch library {{library_id}} published to production for property {{property_id}}
  consumes:
  - type: http
    namespace: launch
    baseUri: https://reactor.adobe.io
    authentication:
      type: bearer
      token: $secrets.adobe_launch_token
    resources:
    - name: libraries
      path: /properties/{{property_id}}/libraries/{{library_id}}/publish
      inputParameters:
      - name: property_id
        in: path
      - name: library_id
        in: path
      operations:
      - name: publish-library
        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 → adobe-launch-rule-deployment.yml

Checks the message count in an Amazon SQS dead letter queue and, if above threshold, creates a PagerDuty alert and posts to Slack.

naftiko: '0.5'
info:
  label: Amazon SQS Dead Letter Queue Monitor
  description: Checks the message count in an Amazon SQS dead letter queue and, if above threshold, creates a PagerDuty alert and posts to Slack.
  tags:
  - engineering
  - messaging
  - amazon-sqs
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: platform-ops
    port: 8080
    tools:
    - name: monitor-dlq
      description: Given an SQS DLQ URL and message threshold, check the queue depth. If above threshold, trigger a PagerDuty alert and Slack notification.
      inputParameters:
      - name: queue_url
        in: body
        type: string
        description: SQS dead letter queue URL.
      - name: threshold
        in: body
        type: integer
        description: Message count threshold.
      steps:
      - name: get-queue-attrs
        type: call
        call: sqs.get-queue-attributes
        with:
          queue_url: '{{queue_url}}'
          attribute_names: ApproximateNumberOfMessages
      - name: alert-pd
        type: call
        call: pagerduty.create-event
        with:
          routing_key: $secrets.pagerduty_routing_key
          summary: DLQ depth {{get-queue-attrs.ApproximateNumberOfMessages}} exceeds threshold {{threshold}}
          severity: error
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: platform-alerts
          text: 'SQS DLQ alert: {{get-queue-attrs.ApproximateNumberOfMessages}} messages in queue (threshold: {{threshold}})'
  consumes:
  - type: http
    namespace: sqs
    baseUri: https://sqs.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: queues
      path: /
      operations:
      - name: get-queue-attributes
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: none
    resources:
    - name: events
      path: /enqueue
      operations:
      - name: create-event
        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 → amazon-sqs-dead-letter-queue-monitor.yml

Executes a SQL query against Amazon Redshift and returns the result set for data warehouse lookups.

naftiko: '0.5'
info:
  label: Amazon Redshift Query Execution
  description: Executes a SQL query against Amazon Redshift and returns the result set for data warehouse lookups.
  tags:
  - data
  - analytics
  - amazon-redshift
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: run-redshift-query
      description: Given a SQL statement and Redshift cluster identifier, execute the query and return the results.
      inputParameters:
      - name: sql
        in: body
        type: string
        description: SQL query to execute.
      - name: cluster_id
        in: body
        type: string
        description: Redshift cluster identifier.
      - name: database
        in: body
        type: string
        description: Database name.
      call: redshift.execute-statement
      with:
        sql: '{{sql}}'
        cluster_id: '{{cluster_id}}'
        database: '{{database}}'
      outputParameters:
      - name: statement_id
        type: string
        mapping: $.Id
  consumes:
  - type: http
    namespace: redshift
    baseUri: https://redshift-data.us-east-1.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: statements
      path: /
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → amazon-redshift-query-execution.yml

When an employee termination is processed in Workday, deactivates their Okta account, closes open ServiceNow access requests, and deactivates the Salesforce user license.

naftiko: '0.5'
info:
  label: Employee Offboarding Deprovisioning
  description: When an employee termination is processed in Workday, deactivates their Okta account, closes open ServiceNow access requests, and deactivates the Salesforce user license.
  tags:
  - hr
  - offboarding
  - okta
  - workday
  - identity
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: deprovision-terminated-employee
      description: Given a terminated employee's Workday ID, Okta user ID, and Salesforce user ID, deactivate their Okta account, close open ServiceNow access requests, and deactivate their Salesforce license. Use immediately upon processing a termination in Workday.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the terminated employee.
      - name: okta_user_id
        in: body
        type: string
        description: Okta user ID to deactivate.
      - name: salesforce_user_id
        in: body
        type: string
        description: Salesforce user ID to deactivate.
      steps:
      - name: deactivate-okta
        type: call
        call: okta-offboard.deactivate-user
        with:
          user_id: '{{okta_user_id}}'
      - name: close-requests
        type: call
        call: servicenow-offboard.close-user-requests
        with:
          employee_id: '{{workday_employee_id}}'
      - name: deactivate-sf
        type: call
        call: salesforce-offboard.update-user
        with:
          user_id: '{{salesforce_user_id}}'
          is_active: 'false'
  consumes:
  - type: http
    namespace: okta-offboard
    baseUri: https://adobe.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: user-lifecycle
      path: /users/{{user_id}}/lifecycle/deactivate
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: servicenow-offboard
    baseUri: https://adobe.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: close-user-requests
        method: PATCH
  - type: http
    namespace: salesforce-offboard
    baseUri: https://adobe.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: update-user
        method: PATCH
Open in Framework → View in Fleet → employee-offboarding-deprovisioning.yml

Retrieves vendor master data from SAP S/4HANA by vendor number, returning name, address, and payment terms.

naftiko: '0.5'
info:
  label: SAP Vendor Master Lookup
  description: Retrieves vendor master data from SAP S/4HANA by vendor number, returning name, address, and payment terms.
  tags:
  - procurement
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: erp-ops
    port: 8080
    tools:
    - name: get-vendor
      description: Given a SAP vendor number, return vendor name, address, and payment terms. Use for invoice verification and onboarding.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: SAP vendor number.
      call: sap.get-vendor
      with:
        vendor: '{{vendor_number}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.d.SupplierName
      - name: city
        type: string
        mapping: $.d.AddressData.CityName
      - name: payment_terms
        type: string
        mapping: $.d.PaymentTerms
  consumes:
  - type: http
    namespace: sap
    baseUri: https://adobe-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}}')
      inputParameters:
      - name: vendor
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → sap-vendor-master-lookup.yml

When an Azure Monitor metric alert fires, creates a ServiceNow incident and notifies the cloud ops Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Azure Monitor Metric Alert Handler
  description: When an Azure Monitor metric alert fires, creates a ServiceNow incident and notifies the cloud ops Microsoft Teams channel.
  tags:
  - cloud
  - monitoring
  - azure-monitor
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-ops
    port: 8080
    tools:
    - name: handle-azure-alert
      description: Given an Azure Monitor alert rule name and resource ID, create a ServiceNow incident and notify the cloud ops Teams channel.
      inputParameters:
      - name: alert_rule
        in: body
        type: string
        description: Azure Monitor alert rule name.
      - name: resource_id
        in: body
        type: string
        description: Azure resource ID that triggered the alert.
      - name: severity
        in: body
        type: string
        description: Alert severity (Sev0-Sev4).
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Azure alert: {{alert_rule}} on {{resource_id}}'
          severity: '{{severity}}'
          category: Cloud Infrastructure
      - name: notify-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: cloud-ops
          text: 'Azure alert fired: {{alert_rule}} | Resource: {{resource_id}} | Severity: {{severity}} | SNOW: {{create-snow-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://adobe.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: 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 → azure-monitor-metric-alert-handler.yml

Retrieves email delivery statistics from SendGrid for a given date range, returning delivered, bounced, and opened counts.

naftiko: '0.5'
info:
  label: SendGrid Email Delivery Status
  description: Retrieves email delivery statistics from SendGrid for a given date range, returning delivered, bounced, and opened counts.
  tags:
  - communications
  - email
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: email-ops
    port: 8080
    tools:
    - name: get-delivery-stats
      description: Given a date range, return SendGrid email delivery stats including delivered, bounced, and opened counts.
      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: sendgrid.get-stats
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: delivered
        type: integer
        mapping: $.stats[0].metrics.delivered
      - name: bounces
        type: integer
        mapping: $.stats[0].metrics.bounces
      - name: opens
        type: integer
        mapping: $.stats[0].metrics.opens
  consumes:
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: stats
      path: /stats
      operations:
      - name: get-stats
        method: GET
Open in Framework → View in Fleet → sendgrid-email-delivery-status.yml

When a Creative Cloud enterprise subscription is approaching renewal, enriches the Salesforce account from ZoomInfo, creates a renewal opportunity, and alerts the account manager in Teams.

naftiko: '0.5'
info:
  label: Creative Cloud Subscription Renewal Outreach
  description: When a Creative Cloud enterprise subscription is approaching renewal, enriches the Salesforce account from ZoomInfo, creates a renewal opportunity, and alerts the account manager in Teams.
  tags:
  - sales
  - crm
  - salesforce
  - creative-cloud
  - renewal
capability:
  exposes:
  - type: mcp
    namespace: renewal-ops
    port: 8080
    tools:
    - name: trigger-renewal-outreach
      description: Given a Salesforce account ID and contract end date, enrich the account with ZoomInfo data, create a renewal opportunity in Salesforce, and send a Teams alert to the account manager. Use when contract end dates are within 90 days.
      inputParameters:
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce account ID for the renewing customer.
      - name: contract_end_date
        in: body
        type: string
        description: Contract expiration date in YYYY-MM-DD format.
      - name: account_manager_upn
        in: body
        type: string
        description: Account manager Teams UPN.
      - name: zoominfo_company_id
        in: body
        type: string
        description: ZoomInfo company ID for enrichment.
      steps:
      - name: enrich-account
        type: call
        call: zoominfo.get-company
        with:
          company_id: '{{zoominfo_company_id}}'
      - name: update-sf-account
        type: call
        call: salesforce-acct.update-account
        with:
          account_id: '{{salesforce_account_id}}'
          employees: '{{enrich-account.employee_count}}'
          annual_revenue: '{{enrich-account.revenue}}'
      - name: create-renewal-opp
        type: call
        call: salesforce-opp.create-opportunity
        with:
          account_id: '{{salesforce_account_id}}'
          name: Renewal — {{enrich-account.company_name}} — {{contract_end_date}}
          stage_name: Renewal Outreach
          close_date: '{{contract_end_date}}'
      - name: alert-account-manager
        type: call
        call: msteams-renewal.send-message
        with:
          recipient_upn: '{{account_manager_upn}}'
          text: 'Renewal alert: {{enrich-account.company_name}} contract ends {{contract_end_date}}. Renewal opportunity created: {{create-renewal-opp.id}}. Employees: {{enrich-account.employee_count}}'
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company/{{company_id}}
      inputParameters:
      - name: company_id
        in: path
      operations:
      - name: get-company
        method: GET
  - type: http
    namespace: salesforce-acct
    baseUri: https://adobe.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: salesforce-opp
    baseUri: https://adobe.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-renewal
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → creative-cloud-subscription-renewal-outreach.yml

Checks the health status of an Elasticsearch index, returning shard count, document count, and store size, then posts critical findings to Slack.

naftiko: '0.5'
info:
  label: Elasticsearch Index Health Check
  description: Checks the health status of an Elasticsearch index, returning shard count, document count, and store size, then posts critical findings to Slack.
  tags:
  - data
  - search
  - elasticsearch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: search-ops
    port: 8080
    tools:
    - name: check-index-health
      description: Given an Elasticsearch index name, fetch health metrics and post any red-status findings to the platform Slack channel.
      inputParameters:
      - name: index_name
        in: body
        type: string
        description: Elasticsearch index name.
      steps:
      - name: get-index-stats
        type: call
        call: elasticsearch.get-index-stats
        with:
          index: '{{index_name}}'
      - name: alert-if-unhealthy
        type: call
        call: slack.post-message
        with:
          channel: platform-alerts
          text: 'Elasticsearch index {{index_name}}: status={{get-index-stats.health}}, docs={{get-index-stats.docs_count}}, size={{get-index-stats.store_size}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://adobe-es.es.amazonaws.com
    authentication:
      type: aws-sigv4
      accessKeyId: $secrets.aws_access_key
      secretAccessKey: $secrets.aws_secret_key
    resources:
    - name: indices
      path: /_cat/indices/{{index}}
      inputParameters:
      - name: index
        in: path
      operations:
      - name: get-index-stats
        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 → elasticsearch-index-health-check.yml

Retrieves the latest run results for a Postman API monitor, returning pass/fail count and average response time.

naftiko: '0.5'
info:
  label: Postman API Monitor Status
  description: Retrieves the latest run results for a Postman API monitor, returning pass/fail count and average response time.
  tags:
  - engineering
  - api-management
  - postman
capability:
  exposes:
  - type: mcp
    namespace: api-ops
    port: 8080
    tools:
    - name: get-monitor-status
      description: Given a Postman monitor ID, return the latest run results including pass count, fail count, and average response time.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Postman monitor ID.
      call: postman.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.monitor.lastRun.status
      - name: pass_count
        type: integer
        mapping: $.monitor.lastRun.stats.assertions.passed
      - name: fail_count
        type: integer
        mapping: $.monitor.lastRun.stats.assertions.failed
  consumes:
  - type: http
    namespace: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: apikey
      key: X-Api-Key
      value: $secrets.postman_api_key
      placement: header
    resources:
    - name: monitors
      path: /monitors/{{monitor_id}}
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → postman-api-monitor-status.yml

Checks Snowflake task history for failed pipelines in the Experience Cloud data warehouse, logs anomalies to Datadog, and opens Jira tickets for the data engineering team.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Health Check
  description: Checks Snowflake task history for failed pipelines in the Experience Cloud data warehouse, logs anomalies to Datadog, and opens Jira tickets for the data engineering team.
  tags:
  - data
  - snowflake
  - datadog
  - monitoring
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: check-pipeline-health
      description: Query Snowflake task execution history for failures, log each failure as a Datadog error event, and open a Jira ticket for the data engineering team if failures are detected. Use daily to verify Adobe's Experience Cloud data pipelines.
      inputParameters:
      - name: lookback_hours
        in: body
        type: integer
        description: Hours of pipeline history to examine.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for data engineering tickets.
      steps:
      - name: get-failures
        type: call
        call: snowflake.get-task-failures
        with:
          lookback_hours: '{{lookback_hours}}'
      - name: log-dd-failures
        type: call
        call: datadog-data.create-event
        with:
          title: Snowflake pipeline failures
          text: 'Failed tasks: {{get-failures.task_names}}'
          alert_type: error
      - name: create-jira
        type: call
        call: jira-data.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: Snowflake pipeline failures — {{get-failures.task_count}} tasks
          description: 'Tasks: {{get-failures.task_names}} | Datadog: {{log-dd-failures.url}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://adobe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/EXPERIENCE_CLOUD/schemas/PUBLIC/tasks/history
      inputParameters:
      - name: lookback_hours
        in: query
      operations:
      - name: get-task-failures
        method: GET
  - type: http
    namespace: datadog-data
    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-data
    baseUri: https://adobe.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 → snowflake-data-pipeline-health-check.yml

Creates a new Microsoft Teams channel for a project and posts a welcome message with links to Jira board and Confluence space.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Provisioning
  description: Creates a new Microsoft Teams channel for a project and posts a welcome message with links to Jira board and Confluence space.
  tags:
  - collaboration
  - project-management
  - microsoft-teams
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: collab-ops
    port: 8080
    tools:
    - name: provision-project-channel
      description: Given a project name, create a Teams channel, and post a welcome message with links to the corresponding Jira board and Confluence space.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: Project name for the new channel.
      - name: team_id
        in: body
        type: string
        description: Microsoft Teams team ID.
      - name: jira_board_url
        in: body
        type: string
        description: Jira board URL for the project.
      - name: confluence_space_url
        in: body
        type: string
        description: Confluence space URL.
      steps:
      - name: create-channel
        type: call
        call: msteams.create-channel
        with:
          team_id: '{{team_id}}'
          display_name: '{{project_name}}'
          description: Project channel for {{project_name}}
      - name: post-welcome
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{create-channel.id}}'
          text: 'Welcome to {{project_name}}! Jira: {{jira_board_url}} | Confluence: {{confluence_space_url}}'
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_token
    resources:
    - name: channels
      path: /teams/{{team_id}}/channels
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: create-channel
        method: POST
    - 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 → microsoft-teams-channel-provisioning.yml

Assigns an Okta user to an application and logs the provisioning event to ServiceNow for audit.

naftiko: '0.5'
info:
  label: Okta Application Assignment
  description: Assigns an Okta user to an application and logs the provisioning event to ServiceNow for audit.
  tags:
  - identity
  - provisioning
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: iam-ops
    port: 8080
    tools:
    - name: assign-app-to-user
      description: Given an Okta user ID and application ID, assign the user to the application and create a ServiceNow audit record.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: Okta user ID.
      - name: app_id
        in: body
        type: string
        description: Okta application ID.
      steps:
      - name: assign-app
        type: call
        call: okta.assign-application
        with:
          app_id: '{{app_id}}'
          user_id: '{{user_id}}'
      - name: log-audit
        type: call
        call: servicenow.create-record
        with:
          table: u_access_audit
          user_id: '{{user_id}}'
          application: '{{app_id}}'
          action: assigned
  consumes:
  - type: http
    namespace: okta
    baseUri: https://adobe.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: app-users
      path: /apps/{{app_id}}/users
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: assign-application
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adobe.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 → okta-application-assignment.yml

After a customer completes an NPS survey, updates their Salesforce account with the score, creates a follow-up task for low scores, and logs the response in Snowflake.

naftiko: '0.5'
info:
  label: Experience Cloud Customer NPS Survey Sync
  description: After a customer completes an NPS survey, updates their Salesforce account with the score, creates a follow-up task for low scores, and logs the response in Snowflake.
  tags:
  - crm
  - customer-service
  - salesforce
  - nps
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: nps-ops
    port: 8080
    tools:
    - name: process-nps-response
      description: Given a customer NPS score and Salesforce account ID, update the account record with the NPS score, create a follow-up task in Salesforce if the score is below 7 (detractor), and log the response to Snowflake for analytics. Use when NPS survey responses are received.
      inputParameters:
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce account ID of the respondent.
      - name: nps_score
        in: body
        type: integer
        description: NPS score from 0–10.
      - name: respondent_email
        in: body
        type: string
        description: Respondent email address.
      - name: survey_date
        in: body
        type: string
        description: Survey completion date in YYYY-MM-DD format.
      steps:
      - name: update-sf-account
        type: call
        call: salesforce-nps.update-account
        with:
          account_id: '{{salesforce_account_id}}'
          nps_score: '{{nps_score}}'
          last_nps_date: '{{survey_date}}'
      - name: create-followup-task
        type: call
        call: salesforce-nps-task.create-task
        with:
          account_id: '{{salesforce_account_id}}'
          subject: 'NPS Detractor Follow-up — Score: {{nps_score}}'
          description: Customer scored {{nps_score}}. Contact to understand issues and recover.
      - name: log-to-snowflake
        type: call
        call: snowflake-nps.insert-record
        with:
          account_id: '{{salesforce_account_id}}'
          email: '{{respondent_email}}'
          score: '{{nps_score}}'
          survey_date: '{{survey_date}}'
  consumes:
  - type: http
    namespace: salesforce-nps
    baseUri: https://adobe.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: salesforce-nps-task
    baseUri: https://adobe.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: snowflake-nps
    baseUri: https://adobe.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: nps-records
      path: /databases/CX_ANALYTICS/schemas/PUBLIC/tables/NPS_RESPONSES/rows
      operations:
      - name: insert-record
        method: POST
Open in Framework → View in Fleet → experience-cloud-customer-nps-survey-sync.yml

Retrieves the status of a Databricks job run by run ID, returning state, start time, and duration.

naftiko: '0.5'
info:
  label: Databricks Job Run Status
  description: Retrieves the status of a Databricks job run by run ID, returning state, start time, and duration.
  tags:
  - data-engineering
  - analytics
  - databricks
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: get-job-run-status
      description: Given a Databricks run ID, return the run state, start time, and duration in seconds. Use for pipeline monitoring.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: Databricks job run ID.
      call: databricks.get-run
      with:
        run_id: '{{run_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.state.life_cycle_state
      - name: result_state
        type: string
        mapping: $.state.result_state
      - name: start_time
        type: number
        mapping: $.start_time
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adobe.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs
      path: /jobs/runs/get
      inputParameters:
      - name: run_id
        in: query
      operations:
      - name: get-run
        method: GET
Open in Framework → View in Fleet → databricks-job-run-status.yml

Retrieves a unified customer profile from Adobe Experience Platform by identity, returning segments, attributes, and last activity.

naftiko: '0.5'
info:
  label: Adobe Experience Platform Profile Lookup
  description: Retrieves a unified customer profile from Adobe Experience Platform by identity, returning segments, attributes, and last activity.
  tags:
  - customer-data
  - personalization
  - adobe-experience-cloud
capability:
  exposes:
  - type: mcp
    namespace: cdp-ops
    port: 8080
    tools:
    - name: get-profile
      description: Given a customer identity namespace and value, return the unified profile with segment memberships, key attributes, and last activity date.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: Identity namespace (e.g., Email, ECID).
      - name: identity_value
        in: body
        type: string
        description: Identity value.
      call: aep.get-profile
      with:
        namespace: '{{namespace}}'
        value: '{{identity_value}}'
      outputParameters:
      - name: segments
        type: array
        mapping: $.segmentMembership
      - name: attributes
        type: object
        mapping: $.record
      - name: last_activity
        type: string
        mapping: $.lastActivityDate
  consumes:
  - type: http
    namespace: aep
    baseUri: https://platform.adobe.io/data/core/ups
    authentication:
      type: bearer
      token: $secrets.aep_token
    resources:
    - name: profiles
      path: /access/entities
      operations:
      - name: get-profile
        method: GET
Open in Framework → View in Fleet → adobe-experience-platform-profile-lookup.yml

Retrieves the current on-call engineer for a given PagerDuty schedule and returns their name, email, and shift end time.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Schedule Lookup
  description: Retrieves the current on-call engineer for a given PagerDuty schedule and returns their name, email, and shift end time.
  tags:
  - engineering
  - incident-management
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: incident-ops
    port: 8080
    tools:
    - name: get-on-call
      description: Given a PagerDuty schedule ID, return the current on-call engineer's name, email, and shift end time.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: PagerDuty schedule ID.
      call: pagerduty.get-on-call
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.schedule.final_schedule.rendered_schedule_entries[0].user.summary
      - name: email
        type: string
        mapping: $.schedule.final_schedule.rendered_schedule_entries[0].user.email
      - name: shift_end
        type: string
        mapping: $.schedule.final_schedule.rendered_schedule_entries[0].end
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: schedules
      path: /schedules/{{schedule_id}}
      inputParameters:
      - name: schedule_id
        in: path
      operations:
      - name: get-on-call
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-schedule-lookup.yml

Queries Workday for employees who have not completed benefits enrollment and sends reminder emails via Microsoft Graph.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Reminder
  description: Queries Workday for employees who have not completed benefits enrollment and sends reminder emails via Microsoft Graph.
  tags:
  - hr
  - benefits
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: send-enrollment-reminders
      description: Fetch employees with incomplete benefits enrollment from Workday and send email reminders via Microsoft Graph.
      inputParameters:
      - name: enrollment_period
        in: body
        type: string
        description: Benefits enrollment period identifier.
      steps:
      - name: get-incomplete
        type: call
        call: workday.get-pending-enrollment
        with:
          period: '{{enrollment_period}}'
      - name: send-reminders
        type: call
        call: msgraph.send-mail
        with:
          recipients: '{{get-incomplete.employee_emails}}'
          subject: 'Action Required: Complete Your Benefits Enrollment'
          body: Please complete your benefits enrollment for period {{enrollment_period}} in Workday.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/adobe
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: benefits
      path: /Benefits/v40.0
      operations:
      - name: get-pending-enrollment
        method: GET
  - 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 → workday-benefits-enrollment-reminder.yml

When a new job requisition is approved in Workday, creates the corresponding job posting on LinkedIn and updates the requisition with the LinkedIn post URL.

naftiko: '0.5'
info:
  label: LinkedIn Job Posting Sync
  description: When a new job requisition is approved in Workday, creates the corresponding job posting on LinkedIn and updates the requisition with the LinkedIn post URL.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: recruiting-ops
    port: 8080
    tools:
    - name: sync-job-to-linkedin
      description: Given a Workday requisition ID, fetch the job details and create a LinkedIn job posting. Update Workday with the LinkedIn URL.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: Workday job requisition ID.
      steps:
      - name: get-requisition
        type: call
        call: workday.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: create-linkedin-post
        type: call
        call: linkedin.create-job
        with:
          title: '{{get-requisition.title}}'
          description: '{{get-requisition.description}}'
          location: '{{get-requisition.location}}'
      - name: update-workday
        type: call
        call: workday.update-requisition
        with:
          requisition_id: '{{requisition_id}}'
          linkedin_url: '{{create-linkedin-post.url}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/adobe
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: requisitions
      path: /Recruiting/v40.0
      operations:
      - name: get-requisition
        method: GET
      - name: update-requisition
        method: PUT
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: jobs
      path: /simpleJobPostings
      operations:
      - name: create-job
        method: POST
Open in Framework → View in Fleet → linkedin-job-posting-sync.yml

Retrieves delivery statistics for an Adobe Campaign email delivery, returning sent count, open rate, and bounce rate.

naftiko: '0.5'
info:
  label: Adobe Campaign Delivery Report
  description: Retrieves delivery statistics for an Adobe Campaign email delivery, returning sent count, open rate, and bounce rate.
  tags:
  - marketing
  - email
  - adobe-campaign
capability:
  exposes:
  - type: mcp
    namespace: campaign-ops
    port: 8080
    tools:
    - name: get-delivery-report
      description: Given an Adobe Campaign delivery ID, return sent count, open rate, click rate, and bounce rate.
      inputParameters:
      - name: delivery_id
        in: body
        type: string
        description: Adobe Campaign delivery ID.
      call: campaign.get-delivery
      with:
        delivery_id: '{{delivery_id}}'
      outputParameters:
      - name: sent
        type: integer
        mapping: $.sent
      - name: open_rate
        type: number
        mapping: $.openRate
      - name: bounce_rate
        type: number
        mapping: $.bounceRate
  consumes:
  - type: http
    namespace: campaign
    baseUri: https://mc.adobe.io/adobe/campaign
    authentication:
      type: bearer
      token: $secrets.adobe_campaign_token
    resources:
    - name: deliveries
      path: /profileAndServicesExt/delivery/{{delivery_id}}
      inputParameters:
      - name: delivery_id
        in: path
      operations:
      - name: get-delivery
        method: GET
Open in Framework → View in Fleet → adobe-campaign-delivery-report.yml

When a Workday role change is approved, updates Okta group memberships, adjusts the Salesforce user profile, and creates an IT ServiceNow follow-up task.

naftiko: '0.5'
info:
  label: Employee Role Change Provisioning
  description: When a Workday role change is approved, updates Okta group memberships, adjusts the Salesforce user profile, and creates an IT ServiceNow follow-up task.
  tags:
  - hr
  - identity
  - workday
  - okta
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: role-provisioning
    port: 8080
    tools:
    - name: process-role-change
      description: Given a Workday employee ID, new role, and Okta group changes, update Okta group membership, update the Salesforce user profile, and create a ServiceNow IT task for access follow-up. Use when an employee's role or department changes.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the employee.
      - name: new_role
        in: body
        type: string
        description: New job title or role.
      - name: okta_add_group_id
        in: body
        type: string
        description: Okta group ID to add the employee to.
      - name: salesforce_user_id
        in: body
        type: string
        description: Salesforce user ID to update.
      steps:
      - name: get-worker
        type: call
        call: workday-rc.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: add-to-okta-group
        type: call
        call: okta-role.add-user-to-group
        with:
          group_id: '{{okta_add_group_id}}'
          user_email: '{{get-worker.work_email}}'
      - name: update-sf-user
        type: call
        call: salesforce-rc.update-user
        with:
          user_id: '{{salesforce_user_id}}'
          title: '{{new_role}}'
      - name: create-it-task
        type: call
        call: servicenow-rc.create-task
        with:
          short_description: 'Role change: {{get-worker.full_name}} → {{new_role}}'
          category: access_management
          assigned_group: IT_Access
  consumes:
  - type: http
    namespace: workday-rc
    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: okta-role
    baseUri: https://adobe.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: group-users
      path: /groups/{{group_id}}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: add-user-to-group
        method: PUT
  - type: http
    namespace: salesforce-rc
    baseUri: https://adobe.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: update-user
        method: PATCH
  - type: http
    namespace: servicenow-rc
    baseUri: https://adobe.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 → employee-role-change-provisioning.yml

When a complex ServiceNow support ticket arrives, sends the ticket description to Anthropic Claude for an intelligent triage summary and routes it to the correct team.

naftiko: '0.5'
info:
  label: AI-Assisted Customer Support Ticket Summarization
  description: When a complex ServiceNow support ticket arrives, sends the ticket description to Anthropic Claude for an intelligent triage summary and routes it to the correct team.
  tags:
  - ai
  - customer-service
  - servicenow
  - anthropic
  - triage
capability:
  exposes:
  - type: mcp
    namespace: ai-support
    port: 8080
    tools:
    - name: triage-support-ticket
      description: Given a ServiceNow incident ID, retrieve the full ticket description, send it to Anthropic Claude for intelligent triage and routing recommendation, then update the ServiceNow ticket with the AI summary and recommended assignment group. Use for complex support tickets requiring expert triage.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: ServiceNow incident sys_id to triage.
      - name: support_channel_id
        in: body
        type: string
        description: Support Teams channel ID for triage summaries.
      steps:
      - name: get-ticket
        type: call
        call: servicenow-triage.get-incident
        with:
          sys_id: '{{incident_id}}'
      - name: generate-summary
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          prompt: 'Analyze this Adobe support ticket and provide: 1) a 2-sentence summary, 2) the recommended team to assign it to (Creative Cloud, Document Cloud, or Experience Cloud), 3) estimated priority. Ticket: {{get-ticket.description}}'
      - name: update-ticket
        type: call
        call: servicenow-triage-update.update-incident
        with:
          sys_id: '{{incident_id}}'
          ai_summary: '{{generate-summary.content[0].text}}'
      - name: notify-support
        type: call
        call: msteams-support.post-channel-message
        with:
          channel_id: '{{support_channel_id}}'
          text: 'AI Triage for INC {{incident_id}}: {{generate-summary.content[0].text}}'
  consumes:
  - type: http
    namespace: servicenow-triage
    baseUri: https://adobe.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: get-incident
        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-triage-update
    baseUri: https://adobe.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: msteams-support
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → ai-assisted-customer-support-ticket-summarization.yml

Triggers a Power BI dataset refresh by dataset ID and returns the refresh status.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh
  description: Triggers a Power BI dataset refresh by dataset ID and returns the refresh status.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: refresh-dataset
      description: Given a Power BI dataset ID, trigger a dataset refresh and return the request ID. Use when data pipelines complete and dashboards need updating.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      - name: group_id
        in: body
        type: string
        description: Power BI workspace (group) ID.
      call: powerbi.refresh-dataset
      with:
        group_id: '{{group_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: datasets
      path: /groups/{{group_id}}/datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: group_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: refresh-dataset
        method: POST
Open in Framework → View in Fleet → power-bi-dataset-refresh.yml

Creates a new ServiceNow knowledge base article from a resolved incident's details and notifies the author via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Knowledge Article Creation
  description: Creates a new ServiceNow knowledge base article from a resolved incident's details and notifies the author via Microsoft Teams.
  tags:
  - it-operations
  - knowledge-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: km-ops
    port: 8080
    tools:
    - name: create-kb-from-incident
      description: Given a ServiceNow incident number, extract resolution details, create a knowledge article, and notify the resolver via Teams.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: create-article
        type: call
        call: servicenow.create-kb-article
        with:
          short_description: 'KB: {{get-incident.short_description}}'
          text: '{{get-incident.close_notes}}'
          knowledge_base: IT Knowledge Base
      - name: notify-author
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: it-knowledge
          text: 'KB article created from {{incident_number}}: {{create-article.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://adobe.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
    - name: kb-articles
      path: /table/kb_knowledge
      operations:
      - name: create-kb-article
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → servicenow-knowledge-article-creation.yml

Searches Jira for overdue tickets, escalates their priority, and posts an escalation summary to the engineering Slack channel.

naftiko: '0.5'
info:
  label: Jira Overdue Ticket Escalation
  description: Searches Jira for overdue tickets, escalates their priority, and posts an escalation summary to the engineering Slack channel.
  tags:
  - engineering
  - project-management
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: eng-ops
    port: 8080
    tools:
    - name: escalate-overdue-tickets
      description: Search Jira for tickets past their due date in a given project, bump their priority, and post an escalation summary to Slack.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for escalation notices.
      steps:
      - name: search-overdue
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND duedate < now() AND status != Done
      - name: post-escalation
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Overdue tickets in {{project_key}}: {{search-overdue.total}} issues need attention.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://adobe.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search-issues
        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 → jira-overdue-ticket-escalation.yml

Retrieves the current state of a Grafana alert rule by UID, returning firing status and evaluation timestamp.

naftiko: '0.5'
info:
  label: Grafana Alert Rule Status
  description: Retrieves the current state of a Grafana alert rule by UID, returning firing status and evaluation timestamp.
  tags:
  - monitoring
  - observability
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-alert-rule-status
      description: Given a Grafana alert rule UID, return the current state, last evaluation time, and labels.
      inputParameters:
      - name: rule_uid
        in: body
        type: string
        description: Grafana alert rule UID.
      call: grafana.get-alert-rule
      with:
        uid: '{{rule_uid}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.state
      - name: last_eval
        type: string
        mapping: $.lastEvaluation
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.adobe.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: alert-rules
      path: /v1/provisioning/alert-rules/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-alert-rule
        method: GET
Open in Framework → View in Fleet → grafana-alert-rule-status.yml

Pulls Adobe's open sales opportunities from Salesforce, refreshes the Power BI pipeline dashboard, and emails a weekly summary to sales leadership.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Pipeline Digest
  description: Pulls Adobe's open sales opportunities from Salesforce, refreshes the Power BI pipeline dashboard, and emails a weekly summary to sales leadership.
  tags:
  - sales
  - crm
  - salesforce
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-digest
    port: 8080
    tools:
    - name: publish-pipeline-report
      description: Given a Salesforce opportunity filter and Power BI dataset ID, retrieve the open sales pipeline from Salesforce, trigger a Power BI refresh, and email the pipeline summary to sales leadership. Use weekly for sales forecast reviews.
      inputParameters:
      - name: division
        in: body
        type: string
        description: Sales division filter, e.g. 'Digital Experience' or 'Creative Cloud'.
      - name: pbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the pipeline dashboard.
      - name: leadership_email
        in: body
        type: string
        description: Sales leadership email distribution list.
      steps:
      - name: get-pipeline
        type: call
        call: salesforce.query-opportunities
        with:
          division: '{{division}}'
      - name: refresh-pbi
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{pbi_dataset_id}}'
      - name: send-summary
        type: call
        call: msgraph.send-email
        with:
          to: '{{leadership_email}}'
          subject: '{{division}} Pipeline Report — {{get-pipeline.record_count}} opps | ${{get-pipeline.total_arr}}'
          body: 'Open pipeline for {{division}}: {{get-pipeline.record_count}} opportunities totaling ${{get-pipeline.total_arr}} ARR. Power BI refreshed.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adobe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /query
      inputParameters:
      - name: division
        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-refreshes
      path: /datasets/{{dataset_id}}/refreshes
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: trigger-refresh
        method: POST
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender}}/sendMail
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-pipeline-digest.yml

Queries Salesforce for the current quarter's pipeline by stage, formats the data, and posts the summary to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Quarterly Pipeline Report
  description: Queries Salesforce for the current quarter's pipeline by stage, formats the data, and posts the summary to a Microsoft Teams channel.
  tags:
  - sales
  - reporting
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: post-pipeline-report
      description: Run a Salesforce SOQL query for current quarter pipeline by stage and post the summary to a Teams channel.
      inputParameters:
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID.
      steps:
      - name: query-pipeline
        type: call
        call: salesforce.query
        with:
          q: SELECT StageName, SUM(Amount) total FROM Opportunity WHERE CloseDate = THIS_QUARTER GROUP BY StageName
      - name: post-teams
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Q Pipeline Report: {{query-pipeline.records}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://adobe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msteams_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 → salesforce-quarterly-pipeline-report.yml

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

naftiko: '0.5'
info:
  label: SAP Purchase Order Status Lookup
  description: Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, and total value.
  tags:
  - finance
  - procurement
  - erp
  - sap
capability:
  exposes:
  - type: mcp
    namespace: erp-ops
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP purchase order number, return the PO status, vendor name, total amount, and currency. Use when procurement or AP teams need to verify PO status before approving an invoice.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number, e.g. '4500012345'.
      call: sap-po.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_amount
        type: string
        mapping: $.d.TotalAmount
      - name: currency
        type: string
        mapping: $.d.TransactionCurrency
  consumes:
  - type: http
    namespace: sap-po
    baseUri: https://adobe-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-status-lookup.yml

Retrieves a Box file's metadata classification and, if marked confidential, restricts external sharing and logs the action to Splunk.

naftiko: '0.5'
info:
  label: Box File Classification Sync
  description: Retrieves a Box file's metadata classification and, if marked confidential, restricts external sharing and logs the action to Splunk.
  tags:
  - data-governance
  - security
  - box
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: enforce-file-classification
      description: Given a Box file ID, check its classification metadata. If confidential, remove external sharing and log to Splunk.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Box file ID.
      steps:
      - name: get-classification
        type: call
        call: box.get-file-metadata
        with:
          file_id: '{{file_id}}'
      - name: log-action
        type: call
        call: splunk.send-event
        with:
          source: box-dlp
          event: 'Classification enforcement on file {{file_id}}: {{get-classification.classification}}'
  consumes:
  - type: http
    namespace: box
    baseUri: https://api.box.com/2.0
    authentication:
      type: bearer
      token: $secrets.box_token
    resources:
    - name: file-metadata
      path: /files/{{file_id}}/metadata/enterprise/securityClassification-6VMVochwUWo
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file-metadata
        method: GET
  - type: http
    namespace: splunk
    baseUri: https://adobe-splunk.splunkcloud.com:8088
    authentication:
      type: bearer
      token: $secrets.splunk_hec_token
    resources:
    - name: events
      path: /services/collector/event
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → box-file-classification-sync.yml

Retrieves performance metrics for a Google Ads campaign, returning impressions, clicks, conversions, and cost.

naftiko: '0.5'
info:
  label: Google Ads Campaign Performance
  description: Retrieves performance metrics for a Google Ads campaign, returning impressions, clicks, conversions, and cost.
  tags:
  - marketing
  - advertising
  - google-ads
capability:
  exposes:
  - type: mcp
    namespace: paid-media
    port: 8080
    tools:
    - name: get-campaign-performance
      description: Given a Google Ads customer ID and campaign ID, return impressions, clicks, conversions, and total cost for the last 7 days.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Google Ads customer ID.
      - name: campaign_id
        in: body
        type: string
        description: Google Ads campaign ID.
      call: google-ads.get-campaign-metrics
      with:
        customer_id: '{{customer_id}}'
        campaign_id: '{{campaign_id}}'
      outputParameters:
      - name: impressions
        type: integer
        mapping: $.results[0].metrics.impressions
      - name: clicks
        type: integer
        mapping: $.results[0].metrics.clicks
      - name: conversions
        type: number
        mapping: $.results[0].metrics.conversions
      - name: cost_micros
        type: number
        mapping: $.results[0].metrics.costMicros
  consumes:
  - type: http
    namespace: google-ads
    baseUri: https://googleads.googleapis.com/v15
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    resources:
    - name: campaigns
      path: /customers/{{customer_id}}/googleAds:searchStream
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-campaign-metrics
        method: POST
Open in Framework → View in Fleet → google-ads-campaign-performance.yml

Fetches a completed Zoom meeting recording and uploads it to Google Drive, then posts the share link to Slack.

naftiko: '0.5'
info:
  label: Zoom Meeting Recording Upload
  description: Fetches a completed Zoom meeting recording and uploads it to Google Drive, then posts the share link to Slack.
  tags:
  - collaboration
  - meetings
  - zoom
  - google-drive
  - slack
capability:
  exposes:
  - type: mcp
    namespace: meeting-ops
    port: 8080
    tools:
    - name: upload-recording
      description: Given a Zoom meeting ID, fetch the recording, upload to Google Drive, and share the link in Slack.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: Zoom meeting ID.
      - name: drive_folder_id
        in: body
        type: string
        description: Google Drive folder ID for upload.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the share link.
      steps:
      - name: get-recording
        type: call
        call: zoom.get-recording
        with:
          meeting_id: '{{meeting_id}}'
      - name: upload-drive
        type: call
        call: gdrive.upload-file
        with:
          folder_id: '{{drive_folder_id}}'
          name: recording-{{meeting_id}}.mp4
          download_url: '{{get-recording.recording_files[0].download_url}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Zoom recording uploaded: {{upload-drive.webViewLink}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: recordings
      path: /meetings/{{meeting_id}}/recordings
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-recording
        method: GET
  - 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: 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 → zoom-meeting-recording-upload.yml

Retrieves sharing permissions for a Google Drive file and returns a list of users with access level.

naftiko: '0.5'
info:
  label: Google Drive File Permission Audit
  description: Retrieves sharing permissions for a Google Drive file and returns a list of users with access level.
  tags:
  - security
  - collaboration
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: audit-file-permissions
      description: Given a Google Drive file ID, return all permission entries with email, role, and type. Use for data access reviews.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: Google Drive file ID.
      call: gdrive.list-permissions
      with:
        file_id: '{{file_id}}'
      outputParameters:
      - name: permissions
        type: array
        mapping: $.permissions[*]
  consumes:
  - type: http
    namespace: gdrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: permissions
      path: /files/{{file_id}}/permissions
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: list-permissions
        method: GET
Open in Framework → View in Fleet → google-drive-file-permission-audit.yml

Retrieves company firmographic data from ZoomInfo by domain name, returning employee count, revenue, and industry.

naftiko: '0.5'
info:
  label: ZoomInfo Company Enrichment
  description: Retrieves company firmographic data from ZoomInfo by domain name, returning employee count, revenue, and industry.
  tags:
  - sales
  - data-enrichment
  - zoominfo
capability:
  exposes:
  - type: mcp
    namespace: sales-intel
    port: 8080
    tools:
    - name: enrich-company
      description: Given a company domain, return ZoomInfo firmographic data including employee count, annual revenue, and industry classification.
      inputParameters:
      - name: domain
        in: body
        type: string
        description: Company domain name.
      call: zoominfo.get-company
      with:
        companyDomain: '{{domain}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.data[0].companyName
      - name: employee_count
        type: integer
        mapping: $.data[0].employeeCount
      - name: revenue
        type: string
        mapping: $.data[0].revenue
      - name: industry
        type: string
        mapping: $.data[0].industry
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /search/company
      operations:
      - name: get-company
        method: POST
Open in Framework → View in Fleet → zoominfo-company-enrichment.yml

Retrieves Microsoft 365 license usage data via Microsoft Graph, returning active users by product and available licenses.

naftiko: '0.5'
info:
  label: Microsoft 365 License Usage Report
  description: Retrieves Microsoft 365 license usage data via Microsoft Graph, returning active users by product and available licenses.
  tags:
  - it-operations
  - license-management
  - microsoft-365
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: get-license-usage
      description: Retrieve Microsoft 365 license assignment and usage data, returning active users, available licenses, and utilization rate.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Report period (D7, D30, D90, D180).
      call: msgraph.get-license-usage
      with:
        period: '{{period}}'
      outputParameters:
      - name: products
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: reports
      path: /reports/getOffice365ActiveUserDetail(period='{{period}}')
      inputParameters:
      - name: period
        in: path
      operations:
      - name: get-license-usage
        method: GET
Open in Framework → View in Fleet → microsoft-365-license-usage-report.yml

Sends a WhatsApp Business API template message to a customer and logs the delivery status to Salesforce.

naftiko: '0.5'
info:
  label: WhatsApp Customer Notification
  description: Sends a WhatsApp Business API template message to a customer and logs the delivery status to Salesforce.
  tags:
  - communications
  - customer-engagement
  - whatsapp
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: comms-ops
    port: 8080
    tools:
    - name: send-whatsapp-notification
      description: Given a customer phone number, template name, and Salesforce case ID, send a WhatsApp template message and log delivery to Salesforce.
      inputParameters:
      - name: phone_number
        in: body
        type: string
        description: Customer phone number in E.164 format.
      - name: template_name
        in: body
        type: string
        description: WhatsApp template name.
      - name: case_id
        in: body
        type: string
        description: Salesforce case ID for logging.
      steps:
      - name: send-message
        type: call
        call: whatsapp.send-template
        with:
          to: '{{phone_number}}'
          template: '{{template_name}}'
      - name: log-to-sf
        type: call
        call: salesforce.create-activity
        with:
          case_id: '{{case_id}}'
          subject: 'WhatsApp: {{template_name}}'
          status: '{{send-message.status}}'
  consumes:
  - 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-template
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adobe.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/Task
      operations:
      - name: create-activity
        method: POST
Open in Framework → View in Fleet → whatsapp-customer-notification.yml

Runs a Splunk saved search for high-severity security events and creates a ServiceNow security incident for each finding.

naftiko: '0.5'
info:
  label: Splunk Security Event Triage
  description: Runs a Splunk saved search for high-severity security events and creates a ServiceNow security incident for each finding.
  tags:
  - security
  - siem
  - splunk
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: triage-security-events
      description: Run a Splunk saved search for critical security events and create ServiceNow incidents for findings.
      inputParameters:
      - name: saved_search_name
        in: body
        type: string
        description: Splunk saved search name.
      steps:
      - name: run-search
        type: call
        call: splunk.dispatch-saved-search
        with:
          name: '{{saved_search_name}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Splunk security finding: {{saved_search_name}}'
          category: Security
          impact: '1'
          urgency: '1'
          search_results: '{{run-search.results}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://adobe-splunk.splunkcloud.com:8089/servicesNS/admin/search
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: saved-searches
      path: /saved/searches/{{name}}/dispatch
      inputParameters:
      - name: name
        in: path
      operations:
      - name: dispatch-saved-search
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adobe.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 → splunk-security-event-triage.yml

Retrieves an employee's current PTO and sick leave balances from Workday by employee ID.

naftiko: '0.5'
info:
  label: Workday Absence Balance Lookup
  description: Retrieves an employee's current PTO and sick leave balances from Workday by employee ID.
  tags:
  - hr
  - leave-management
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-ops
    port: 8080
    tools:
    - name: get-absence-balance
      description: Given a Workday employee ID, return current PTO balance, sick leave balance, and next accrual date. Use when employees or managers need to check leave availability.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-balance
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: pto_balance
        type: number
        mapping: $.Worker.TimeOff.PTO_Balance
      - name: sick_balance
        type: number
        mapping: $.Worker.TimeOff.Sick_Balance
      - name: next_accrual_date
        type: string
        mapping: $.Worker.TimeOff.Next_Accrual_Date
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/service/adobe
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: absence
      path: /Human_Resources/v40.0/Get_Workers
      operations:
      - name: get-balance
        method: GET
Open in Framework → View in Fleet → workday-absence-balance-lookup.yml

Retrieves Jira issue status for ADP engineering teams.

naftiko: '0.5'
info:
  label: Jira Issue Status
  description: Retrieves Jira issue status for ADP 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 ADP.
      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://adp.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 ADP knowledge base.

naftiko: '0.5'
info:
  label: Confluence Page Retrieval
  description: Retrieves Confluence page content for ADP knowledge base.
  tags:
  - collaboration
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: get-page
      description: Get page at ADP.
      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://adp.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

Tracks certifications in ADP, identifies expirations, sends reminders, creates renewal tasks in ServiceNow, and notifies managers.

naftiko: '0.5'
info:
  label: Employee Certification Tracker Pipeline
  description: Tracks certifications in ADP, identifies expirations, sends reminders, creates renewal tasks in ServiceNow, and notifies managers.
  tags:
  - compliance
  - adp
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: employee_certification_tracker_pipeline
      description: Orchestrate employee certification tracker pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp.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 → employee-certification-tracker-pipeline.yml

Retrieves the federal and state tax filing status from ADP, validates against compliance rules in ServiceNow, and logs the audit result in Confluence.

naftiko: '0.5'
info:
  label: Tax Filing Status and Compliance Check
  description: Retrieves the federal and state tax filing status from ADP, validates against compliance rules in ServiceNow, and logs the audit result in Confluence.
  tags:
  - payroll
  - tax
  - adp
  - compliance
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: payroll-tax
    port: 8080
    tools:
    - name: get-tax-filing-status
      description: Look up tax withholding elections, validate compliance, and log the audit.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      steps:
      - name: fetch-withholdings
        type: call
        call: adp.get-tax-withholdings
        with:
          associate_oid: '{{associate_oid}}'
      - name: validate-compliance
        type: call
        call: servicenow.check-compliance
        with:
          state_code: '{{fetch-withholdings.stateCode}}'
          filing_status: '{{fetch-withholdings.federalFilingStatus}}'
      - name: log-audit
        type: call
        call: confluence.create-page
        with:
          space_key: TAX_AUDIT
          title: 'Tax Filing Audit: {{associate_oid}}'
          body: 'Federal: {{fetch-withholdings.federalFilingStatus}}, State: {{fetch-withholdings.stateCode}}, Compliance: {{validate-compliance.status}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: tax-withholdings
      path: /workers/{{associate_oid}}/tax-withholdings
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-tax-withholdings
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: compliance-checks
      path: /table/tax_compliance_check
      operations:
      - name: check-compliance
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://adp-corp.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
Open in Framework → View in Fleet → tax-filing-status-and-compliance-check.yml

Collects HR data from ADP, validates against labor laws in Snowflake, creates audit findings in ServiceNow, and notifies compliance.

naftiko: '0.5'
info:
  label: HR Compliance Audit Pipeline
  description: Collects HR data from ADP, validates against labor laws in Snowflake, creates audit findings in ServiceNow, and notifies compliance.
  tags:
  - audit
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: audit
    port: 8080
    tools:
    - name: hr_compliance_audit_pipeline
      description: Orchestrate hr compliance audit pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → hr-compliance-audit-pipeline.yml

Configures tax withholding in ADP for new hires, validates state registrations, creates compliance records, and notifies payroll.

naftiko: '0.5'
info:
  label: New Hire Tax Setup Pipeline
  description: Configures tax withholding in ADP for new hires, validates state registrations, creates compliance records, and notifies payroll.
  tags:
  - tax
  - adp
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: tax
    port: 8080
    tools:
    - name: new_hire_tax_setup_pipeline
      description: Orchestrate new hire tax setup pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp.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: snowflake
    baseUri: https://adp.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 → new-hire-tax-setup-pipeline.yml

Checks ServiceNow incident status for ADP IT operations.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Check
  description: Checks ServiceNow incident status for ADP IT operations.
  tags:
  - itsm
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident
      description: Look up incident at ADP.
      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://adp.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

Pulls shift schedules from ADP Workforce Now and syncs them to Google Calendar for team visibility, then posts the weekly schedule summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Workforce Scheduling Sync to Google Calendar
  description: Pulls shift schedules from ADP Workforce Now and syncs them to Google Calendar for team visibility, then posts the weekly schedule summary to Microsoft Teams.
  tags:
  - workforce-management
  - scheduling
  - adp
  - google-workspace
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: schedule-sync
    port: 8080
    tools:
    - name: sync-weekly-schedule
      description: Sync ADP shift schedules to Google Calendar and post a summary to Teams.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to sync schedules for.
      - name: week_start
        in: body
        type: string
        description: The week start date in YYYY-MM-DD format.
      steps:
      - name: get-schedules
        type: call
        call: adp.get-shift-schedules
        with:
          department: '{{department}}'
          week_start: '{{week_start}}'
      - name: create-calendar-events
        type: call
        call: google-calendar.create-event
        with:
          calendar_id: '{{department}}_shifts'
          summary: 'Shift Schedule: {{department}} - Week of {{week_start}}'
          start_date: '{{week_start}}'
          description: '{{get-schedules.scheduleDetails}}'
      - name: post-summary
        type: call
        call: msteams.send-channel-message
        with:
          team_id: operations
          channel: scheduling
          text: 'Weekly schedule posted for {{department}} starting {{week_start}}. {{get-schedules.totalShifts}} shifts across {{get-schedules.employeeCount}} employees. Calendar: {{create-calendar-events.eventUrl}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/time/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: shift-schedules
      path: /schedules?department={{department}}&weekStart={{week_start}}
      inputParameters:
      - name: department
        in: query
      - name: week_start
        in: query
      operations:
      - name: get-shift-schedules
        method: GET
  - type: http
    namespace: google-calendar
    baseUri: https://www.googleapis.com/calendar/v3
    authentication:
      type: bearer
      token: $secrets.google_calendar_token
    resources:
    - name: events
      path: /calendars/{{calendar_id}}/events
      inputParameters:
      - name: calendar_id
        in: path
      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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → workforce-scheduling-sync-to-google-calendar.yml

Monitors compensation changes in ADP, validates approvals, audits against policies in Snowflake, and notifies HR compliance.

naftiko: '0.5'
info:
  label: Compensation Change Audit Pipeline
  description: Monitors compensation changes in ADP, validates approvals, audits against policies in Snowflake, and notifies HR compliance.
  tags:
  - audit
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: audit
    port: 8080
    tools:
    - name: compensation_change_audit_pipeline
      description: Orchestrate compensation change audit pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → compensation-change-audit-pipeline.yml

Processes a promotion by updating the job title and compensation in ADP, generating an offer letter in Google Docs, and notifying HR leadership via Slack.

naftiko: '0.5'
info:
  label: Promotion and Salary Adjustment Pipeline
  description: Processes a promotion by updating the job title and compensation in ADP, generating an offer letter in Google Docs, and notifying HR leadership via Slack.
  tags:
  - hr
  - compensation
  - adp
  - google-docs
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr-promotions
    port: 8080
    tools:
    - name: process-promotion
      description: Process an employee promotion with title change, salary adjustment, and notifications.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: new_title
        in: body
        type: string
        description: The new job title.
      - name: new_salary
        in: body
        type: string
        description: The new annual salary.
      - name: effective_date
        in: body
        type: string
        description: The promotion effective date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: update-job
        type: call
        call: adp.update-job-title
        with:
          associate_oid: '{{associate_oid}}'
          new_title: '{{new_title}}'
          effective_date: '{{effective_date}}'
      - name: update-comp
        type: call
        call: adp.update-compensation
        with:
          associate_oid: '{{associate_oid}}'
          new_salary: '{{new_salary}}'
          effective_date: '{{effective_date}}'
      - name: generate-letter
        type: call
        call: google-docs.create-document
        with:
          title: 'Promotion Letter: {{get-employee.legalName.formattedName}} - {{new_title}}'
          template_id: promotion_letter_template
      - name: notify-hr
        type: call
        call: slack.post-message
        with:
          channel: '#hr-actions'
          text: 'Promotion processed: {{get-employee.legalName.formattedName}} to {{new_title}} at {{new_salary}} effective {{effective_date}}. Letter: {{generate-letter.url}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker
        method: GET
    - name: job-titles
      path: /workers/{{associate_oid}}/work-assignments/job-title
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: update-job-title
        method: PATCH
    - name: compensation
      path: /workers/{{associate_oid}}/compensation
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: update-compensation
        method: PATCH
  - type: http
    namespace: google-docs
    baseUri: https://docs.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_docs_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: create-document
        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 → promotion-and-salary-adjustment-pipeline.yml

Runs validation rules against ADP payroll data, identifies errors in Snowflake, creates correction tasks in Jira, and notifies payroll ops.

naftiko: '0.5'
info:
  label: Payroll Error Detection Pipeline
  description: Runs validation rules against ADP payroll data, identifies errors in Snowflake, creates correction tasks in Jira, and notifies payroll ops.
  tags:
  - payroll
  - adp
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: payroll_error_detection_pipeline
      description: Orchestrate payroll error detection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → payroll-error-detection-pipeline.yml

Retrieves the skills and competencies recorded for an employee in ADP talent management.

naftiko: '0.5'
info:
  label: Employee Skills Inventory Lookup
  description: Retrieves the skills and competencies recorded for an employee in ADP talent management.
  tags:
  - talent
  - skills
  - adp
capability:
  exposes:
  - type: mcp
    namespace: talent-skills
    port: 8080
    tools:
    - name: get-skills-inventory
      description: Retrieve skills and competencies for an employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-skills
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: skills_count
        type: string
        mapping: $.skills.length
      - name: top_skill
        type: string
        mapping: $.skills[0].skillName
      - name: proficiency_level
        type: string
        mapping: $.skills[0].proficiencyLevel
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/talent/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: skills
      path: /workers/{{associate_oid}}/skills
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-skills
        method: GET
Open in Framework → View in Fleet → employee-skills-inventory-lookup.yml

Retrieves the most recent pay stub for an employee from ADP payroll.

naftiko: '0.5'
info:
  label: Pay Stub Retrieval
  description: Retrieves the most recent pay stub for an employee from ADP payroll.
  tags:
  - payroll
  - pay-stub
  - adp
capability:
  exposes:
  - type: mcp
    namespace: payroll-stubs
    port: 8080
    tools:
    - name: get-latest-pay-stub
      description: Retrieve the most recent pay stub for an employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-latest-stub
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: pay_date
        type: string
        mapping: $.payStatement.payDate
      - name: gross_pay
        type: string
        mapping: $.payStatement.grossPayAmount
      - name: net_pay
        type: string
        mapping: $.payStatement.netPayAmount
      - name: document_url
        type: string
        mapping: $.payStatement.documentUri
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: pay-stubs
      path: /workers/{{associate_oid}}/pay-statements?$top=1&$orderby=payDate desc
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-latest-stub
        method: GET
Open in Framework → View in Fleet → pay-stub-retrieval.yml

Retrieves Datadog monitor status for ADP infrastructure.

naftiko: '0.5'
info:
  label: Datadog Monitor Status
  description: Retrieves Datadog monitor status for ADP infrastructure.
  tags:
  - monitoring
  - datadog
  - alerting
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-monitor
      description: Check monitor at ADP.
      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 compensation details from ADP, compares against market benchmarks stored in Google Sheets, and generates a compa-ratio report in Power BI.

naftiko: '0.5'
info:
  label: Compensation Benchmark Pipeline
  description: Retrieves compensation details from ADP, compares against market benchmarks stored in Google Sheets, and generates a compa-ratio report in Power BI.
  tags:
  - compensation
  - adp
  - google-sheets
  - power-bi
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: compensation
    port: 8080
    tools:
    - name: get-compensation
      description: Retrieve compensation details, compare against benchmarks, and push to analytics.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      steps:
      - name: fetch-comp
        type: call
        call: adp.get-compensation-detail
        with:
          associate_oid: '{{associate_oid}}'
      - name: get-benchmarks
        type: call
        call: google-sheets.get-range
        with:
          spreadsheet_id: salary_benchmarks_2026
          range: Benchmarks!A:D
      - name: push-to-powerbi
        type: call
        call: powerbi.push-dataset-rows
        with:
          dataset_id: compensation_analytics
          table_name: compa_ratios
          rows: associate={{associate_oid}},salary={{fetch-comp.baseSalary}},grade={{fetch-comp.payGrade}}
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: compensation
      path: /workers/{{associate_oid}}/compensation
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-compensation-detail
        method: GET
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheet-values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: get-range
        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-dataset-rows
        method: POST
Open in Framework → View in Fleet → compensation-benchmark-pipeline.yml

Launches enrollment in ADP, sends communications, tracks participation in Snowflake, generates reports in Power BI, and notifies HR.

naftiko: '0.5'
info:
  label: Benefits Open Enrollment Orchestrator
  description: Launches enrollment in ADP, sends communications, tracks participation in Snowflake, generates reports in Power BI, and notifies HR.
  tags:
  - benefits
  - adp
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: benefits
    port: 8080
    tools:
    - name: benefits_open_enrollment_orchestrator
      description: Orchestrate benefits open enrollment orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → benefits-open-enrollment-orchestrator.yml

Audits employee records in ADP, identifies incomplete data in Snowflake, creates cleanup tasks in Jira, and notifies HR data team.

naftiko: '0.5'
info:
  label: Employee Data Quality Pipeline
  description: Audits employee records in ADP, identifies incomplete data in Snowflake, creates cleanup tasks in Jira, and notifies HR data team.
  tags:
  - data-quality
  - adp
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: employee_data_quality_pipeline
      description: Orchestrate employee data quality pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → employee-data-quality-pipeline.yml

Queries Grafana dashboard data for ADP monitoring.

naftiko: '0.5'
info:
  label: Grafana Dashboard Query
  description: Queries Grafana dashboard data for ADP monitoring.
  tags:
  - monitoring
  - grafana
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: get-dashboard
      description: Query dashboard at ADP.
      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://adp-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

Extracts payroll tax data from ADP, validates calculations in Snowflake, submits filings, logs confirmation in ServiceNow, and notifies tax team.

naftiko: '0.5'
info:
  label: Payroll Tax Filing Orchestrator
  description: Extracts payroll tax data from ADP, validates calculations in Snowflake, submits filings, logs confirmation in ServiceNow, and notifies tax team.
  tags:
  - tax
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: tax
    port: 8080
    tools:
    - name: payroll_tax_filing_orchestrator
      description: Orchestrate payroll tax filing orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → payroll-tax-filing-orchestrator.yml

Checks the status of a payroll processing run in ADP including completion percentage, error count, and expected completion time.

naftiko: '0.5'
info:
  label: ADP Pay Run Status
  description: Checks the status of a payroll processing run in ADP including completion percentage, error count, and expected completion time.
  tags:
  - payroll
  - adp
  - workforce-now
capability:
  exposes:
  - type: mcp
    namespace: payroll-status
    port: 8080
    tools:
    - name: get-pay-run-status
      description: Check the status of a payroll run by ADP pay run identifier.
      inputParameters:
      - name: pay_run_id
        in: body
        type: string
        description: The ADP payroll run identifier.
      call: adp.get-run-status
      with:
        pay_run_id: '{{pay_run_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.payRun.status
      - name: completion_pct
        type: string
        mapping: $.payRun.completionPercentage
      - name: error_count
        type: string
        mapping: $.payRun.errorCount
      - name: expected_completion
        type: string
        mapping: $.payRun.expectedCompletionTime
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: pay-runs
      path: /pay-runs/{{pay_run_id}}/status
      inputParameters:
      - name: pay_run_id
        in: path
      operations:
      - name: get-run-status
        method: GET
Open in Framework → View in Fleet → adp-pay-run-status.yml

Retrieves active professional certifications for an employee from ADP talent management.

naftiko: '0.5'
info:
  label: Employee Certification Tracker
  description: Retrieves active professional certifications for an employee from ADP talent management.
  tags:
  - talent
  - certifications
  - adp
capability:
  exposes:
  - type: mcp
    namespace: talent-certs
    port: 8080
    tools:
    - name: get-certifications
      description: Retrieve professional certifications for an employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-certifications
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: certification_count
        type: string
        mapping: $.certifications.length
      - name: latest_cert_name
        type: string
        mapping: $.certifications[0].certificationName
      - name: expiration_date
        type: string
        mapping: $.certifications[0].expirationDate
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/talent/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: certifications
      path: /workers/{{associate_oid}}/certifications
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-certifications
        method: GET
Open in Framework → View in Fleet → employee-certification-tracker.yml

Extracts ACA data from ADP, validates eligibility in Snowflake, generates 1095-C forms, files with IRS, and notifies compliance team.

naftiko: '0.5'
info:
  label: ACA Compliance Reporting Pipeline
  description: Extracts ACA data from ADP, validates eligibility in Snowflake, generates 1095-C forms, files with IRS, and notifies compliance team.
  tags:
  - compliance
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: aca_compliance_reporting_pipeline
      description: Orchestrate aca compliance reporting pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → aca-compliance-reporting-pipeline.yml

Retrieves workers compensation claim details for an employee from ADP insurance services.

naftiko: '0.5'
info:
  label: Workers Compensation Claim Lookup
  description: Retrieves workers compensation claim details for an employee from ADP insurance services.
  tags:
  - benefits
  - workers-compensation
  - adp
  - insurance
capability:
  exposes:
  - type: mcp
    namespace: workers-comp
    port: 8080
    tools:
    - name: get-wc-claims
      description: Retrieve workers compensation claims for an employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-wc-claims
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: active_claims
        type: string
        mapping: $.claims.length
      - name: latest_claim_status
        type: string
        mapping: $.claims[0].status
      - name: latest_claim_date
        type: string
        mapping: $.claims[0].incidentDate
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/insurance/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: wc-claims
      path: /workers/{{associate_oid}}/workers-comp-claims
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-wc-claims
        method: GET
Open in Framework → View in Fleet → workers-compensation-claim-lookup.yml

Retrieves PagerDuty incident details for ADP on-call teams.

naftiko: '0.5'
info:
  label: PagerDuty Incident Details
  description: Retrieves PagerDuty incident details for ADP 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 ADP.
      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

Queries ADP for an employee's PTO balances, cross-references upcoming scheduled shifts, and sends the combined summary via Microsoft Teams.

naftiko: '0.5'
info:
  label: Time-Off Balance and Schedule Check
  description: Queries ADP for an employee's PTO balances, cross-references upcoming scheduled shifts, and sends the combined summary via Microsoft Teams.
  tags:
  - time-off
  - adp
  - workforce-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: time-off
    port: 8080
    tools:
    - name: get-time-off-balance
      description: Retrieve time-off balances and upcoming schedule for an employee, then notify via Teams.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      steps:
      - name: fetch-balances
        type: call
        call: adp.get-leave-balances
        with:
          associate_oid: '{{associate_oid}}'
      - name: get-upcoming-schedule
        type: call
        call: adp.get-shift-schedule
        with:
          associate_oid: '{{associate_oid}}'
      - name: notify-employee
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{fetch-balances.workerEmail}}'
          text: 'Your PTO balances: Vacation={{fetch-balances.vacationHours}}h, Sick={{fetch-balances.sickHours}}h. Next scheduled shift: {{get-upcoming-schedule.nextShiftDate}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/time/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: leave-balances
      path: /workers/{{associate_oid}}/time-off-balances
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-leave-balances
        method: GET
    - name: shift-schedules
      path: /workers/{{associate_oid}}/schedules
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-shift-schedule
        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 → time-off-balance-and-schedule-check.yml

Aggregates payroll data from multiple ADP country instances, consolidates in Snowflake, generates global reports, and notifies finance.

naftiko: '0.5'
info:
  label: Multi-Country Payroll Consolidation
  description: Aggregates payroll data from multiple ADP country instances, consolidates in Snowflake, generates global reports, and notifies finance.
  tags:
  - global-payroll
  - adp
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: global-payroll
    port: 8080
    tools:
    - name: multi_country_payroll_consolidation
      description: Orchestrate multi-country payroll consolidation workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → multi-country-payroll-consolidation.yml

Retrieves an employee payroll summary from ADP Workforce Now by employee ID, returning gross pay, net pay, deductions, and pay period details.

naftiko: '0.5'
info:
  label: Employee Payroll Summary
  description: Retrieves an employee payroll summary from ADP Workforce Now by employee ID, returning gross pay, net pay, deductions, and pay period details.
  tags:
  - payroll
  - adp
  - workforce-now
capability:
  exposes:
  - type: mcp
    namespace: payroll-lookup
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Look up an employee payroll summary by ADP associate OID. Returns gross pay, net pay, deductions, and pay period.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID for the employee.
      call: adp.get-pay-statement
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: gross_pay
        type: string
        mapping: $.payStatements[0].grossPayAmount.amount
      - name: net_pay
        type: string
        mapping: $.payStatements[0].netPayAmount.amount
      - name: pay_period_start
        type: string
        mapping: $.payStatements[0].payPeriod.startDate
      - name: pay_period_end
        type: string
        mapping: $.payStatements[0].payPeriod.endDate
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: pay-statements
      path: /workers/{{associate_oid}}/pay-statements
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-pay-statement
        method: GET
Open in Framework → View in Fleet → employee-payroll-summary.yml

Checks COBRA continuation coverage eligibility for a recently terminated employee from ADP benefits administration.

naftiko: '0.5'
info:
  label: COBRA Eligibility Check
  description: Checks COBRA continuation coverage eligibility for a recently terminated employee from ADP benefits administration.
  tags:
  - benefits
  - cobra
  - adp
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: benefits-cobra
    port: 8080
    tools:
    - name: check-cobra-eligibility
      description: Check COBRA eligibility for a terminated employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: termination_date
        in: body
        type: string
        description: The termination date in YYYY-MM-DD format.
      call: adp.get-cobra-eligibility
      with:
        associate_oid: '{{associate_oid}}'
        termination_date: '{{termination_date}}'
      outputParameters:
      - name: eligible
        type: string
        mapping: $.cobra.isEligible
      - name: qualifying_event
        type: string
        mapping: $.cobra.qualifyingEvent
      - name: coverage_end_date
        type: string
        mapping: $.cobra.maxCoverageEndDate
      - name: monthly_premium
        type: string
        mapping: $.cobra.monthlyPremium
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/benefits/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: cobra-eligibility
      path: /workers/{{associate_oid}}/cobra-eligibility?terminationDate={{termination_date}}
      inputParameters:
      - name: associate_oid
        in: path
      - name: termination_date
        in: query
      operations:
      - name: get-cobra-eligibility
        method: GET
Open in Framework → View in Fleet → cobra-eligibility-check.yml

Retrieves the current benefits enrollment from ADP, logs the inquiry in ServiceNow for audit tracking, and posts a summary to the HR Slack channel.

naftiko: '0.5'
info:
  label: Benefits Enrollment Audit Pipeline
  description: Retrieves the current benefits enrollment from ADP, logs the inquiry in ServiceNow for audit tracking, and posts a summary to the HR Slack channel.
  tags:
  - benefits
  - adp
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: benefits-lookup
    port: 8080
    tools:
    - name: get-benefits-enrollment
      description: Retrieve current benefits enrollment by ADP associate OID, log the inquiry, and post a summary.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID for the employee.
      steps:
      - name: fetch-enrollment
        type: call
        call: adp.get-enrollment
        with:
          associate_oid: '{{associate_oid}}'
      - name: log-inquiry
        type: call
        call: servicenow.create-record
        with:
          short_description: 'Benefits enrollment lookup: {{associate_oid}}'
          category: benefits_audit
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '#benefits-inquiries'
          text: 'Benefits lookup for {{associate_oid}}: Medical={{fetch-enrollment.medicalPlan}}, Coverage={{fetch-enrollment.coverageLevel}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/benefits/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: enrollments
      path: /workers/{{associate_oid}}/benefit-enrollments
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-enrollment
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → benefits-enrollment-audit-pipeline.yml

After payroll processing in ADP, extracts journal entries and posts them to SAP for general ledger reconciliation, then logs the sync status in Confluence.

naftiko: '0.5'
info:
  label: Payroll Journal Entry Export to SAP
  description: After payroll processing in ADP, extracts journal entries and posts them to SAP for general ledger reconciliation, then logs the sync status in Confluence.
  tags:
  - payroll
  - adp
  - sap
  - confluence
  - accounting
capability:
  exposes:
  - type: mcp
    namespace: payroll-gl-sync
    port: 8080
    tools:
    - name: export-payroll-to-gl
      description: Export ADP payroll journal entries to SAP general ledger and document in Confluence.
      inputParameters:
      - name: pay_run_id
        in: body
        type: string
        description: The ADP payroll run identifier.
      - name: posting_date
        in: body
        type: string
        description: The GL posting date in YYYY-MM-DD format.
      steps:
      - name: get-journal-entries
        type: call
        call: adp.get-payroll-journal
        with:
          pay_run_id: '{{pay_run_id}}'
      - name: post-to-sap
        type: call
        call: sap.create-journal-entry
        with:
          company_code: '{{get-journal-entries.companyCode}}'
          posting_date: '{{posting_date}}'
          line_items: '{{get-journal-entries.lineItems}}'
      - name: document-sync
        type: call
        call: confluence.create-page
        with:
          space_key: PAYROLL
          title: 'GL Sync: Pay Run {{pay_run_id}} - {{posting_date}}'
          body: 'Payroll journal entries from run {{pay_run_id}} posted to SAP document {{post-to-sap.documentNumber}}. Total amount: {{get-journal-entries.totalAmount}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: payroll-journals
      path: /pay-runs/{{pay_run_id}}/journal-entries
      inputParameters:
      - name: pay_run_id
        in: path
      operations:
      - name: get-payroll-journal
        method: GET
  - type: http
    namespace: sap
    baseUri: https://adp-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRY_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: journal-entries
      path: /A_JournalEntry
      operations:
      - name: create-journal-entry
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://adp-corp.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
Open in Framework → View in Fleet → payroll-journal-entry-export-to-sap.yml

On hire event in ADP, triggers I-9 document verification, stores results in SharePoint, and creates a compliance tracking ticket in ServiceNow.

naftiko: '0.5'
info:
  label: New Hire I-9 Verification Pipeline
  description: On hire event in ADP, triggers I-9 document verification, stores results in SharePoint, and creates a compliance tracking ticket in ServiceNow.
  tags:
  - compliance
  - i9-verification
  - adp
  - sharepoint
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance-i9
    port: 8080
    tools:
    - name: verify-i9-documents
      description: Initiate I-9 verification for a new hire and track compliance status.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID for the new hire.
      - name: hire_date
        in: body
        type: string
        description: The hire date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: initiate-verification
        type: call
        call: adp.create-i9-verification
        with:
          associate_oid: '{{associate_oid}}'
          hire_date: '{{hire_date}}'
      - name: store-documents
        type: call
        call: sharepoint.upload-file
        with:
          site_id: hr_compliance_site
          folder_path: I9_Documents/{{get-employee.legalName.formattedName}}_{{hire_date}}
          file_name: i9_verification_{{associate_oid}}.pdf
      - name: create-tracking-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'I-9 verification: {{get-employee.legalName.formattedName}}'
          category: compliance
          assigned_group: HR_Compliance
          description: 'I-9 verification initiated for {{get-employee.legalName.formattedName}} hired {{hire_date}}. Verification ID: {{initiate-verification.verificationId}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker
        method: GET
    - name: i9-verifications
      path: /workers/{{associate_oid}}/i9-verifications
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: create-i9-verification
        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}}/{{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: servicenow
    baseUri: https://adp-corp.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 → new-hire-i-9-verification-pipeline.yml

Identifies employees needing reverification from ADP, sends notifications, tracks completion, escalates in ServiceNow, and notifies HR compliance.

naftiko: '0.5'
info:
  label: I-9 Reverification Pipeline
  description: Identifies employees needing reverification from ADP, sends notifications, tracks completion, escalates in ServiceNow, and notifies HR compliance.
  tags:
  - compliance
  - adp
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: i9_reverification_pipeline
      description: Orchestrate i-9 reverification pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp.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 → i-9-reverification-pipeline.yml

Validates payroll data against jurisdiction tax rules, checks ADP compliance database, creates exception reports, and notifies payroll team.

naftiko: '0.5'
info:
  label: Multi-Jurisdiction Payroll Compliance Pipeline
  description: Validates payroll data against jurisdiction tax rules, checks ADP compliance database, creates exception reports, and notifies payroll team.
  tags:
  - payroll
  - compliance
  - adp
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: multi_jurisdiction_payroll_compliance_pi
      description: Orchestrate multi-jurisdiction payroll compliance pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → multi-jurisdiction-payroll-compliance-pipeline.yml

When a new talent requisition is approved in ADP Recruiting, publishes the job posting to LinkedIn and logs the posting in Jira for recruiting team tracking.

naftiko: '0.5'
info:
  label: Talent Requisition to Job Posting Pipeline
  description: When a new talent requisition is approved in ADP Recruiting, publishes the job posting to LinkedIn and logs the posting in Jira for recruiting team tracking.
  tags:
  - talent
  - recruiting
  - adp
  - linkedin
  - jira
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: publish-requisition
      description: Publish an approved ADP requisition to LinkedIn and track in Jira.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The ADP requisition identifier.
      steps:
      - name: get-requisition
        type: call
        call: adp.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: post-to-linkedin
        type: call
        call: linkedin.create-job-posting
        with:
          title: '{{get-requisition.title}}'
          description: '{{get-requisition.description}}'
          location: '{{get-requisition.location}}'
          company_id: '{{get-requisition.companyId}}'
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project: RECRUIT
          summary: 'Job posted: {{get-requisition.title}} - LinkedIn ID {{post-to-linkedin.postingId}}'
          issue_type: Task
          description: Requisition {{requisition_id}} published to LinkedIn on {{post-to-linkedin.publishedDate}}.
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/staffing/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: requisitions
      path: /job-requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-postings
      path: /jobPostings
      operations:
      - name: create-job-posting
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adp-corp.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 → talent-requisition-to-job-posting-pipeline.yml

Retrieves the current 401k contribution election and employer match details for an employee from ADP retirement services.

naftiko: '0.5'
info:
  label: 401k Contribution Lookup
  description: Retrieves the current 401k contribution election and employer match details for an employee from ADP retirement services.
  tags:
  - benefits
  - retirement
  - adp
capability:
  exposes:
  - type: mcp
    namespace: retirement-benefits
    port: 8080
    tools:
    - name: get-401k-contributions
      description: Retrieve 401k contribution details for an employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-retirement-contributions
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: employee_pct
        type: string
        mapping: $.retirementPlan.employeeContributionPercentage
      - name: employer_match_pct
        type: string
        mapping: $.retirementPlan.employerMatchPercentage
      - name: ytd_contribution
        type: string
        mapping: $.retirementPlan.ytdContribution
      - name: plan_name
        type: string
        mapping: $.retirementPlan.planName
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/benefits/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: retirement-plans
      path: /workers/{{associate_oid}}/retirement-contributions
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-retirement-contributions
        method: GET
Open in Framework → View in Fleet → 401k-contribution-lookup.yml

Distributes surveys via ADP, collects responses, analyzes in Snowflake, generates insights in Power BI, and notifies HR leaders.

naftiko: '0.5'
info:
  label: Employee Engagement Survey Pipeline
  description: Distributes surveys via ADP, collects responses, analyzes in Snowflake, generates insights in Power BI, and notifies HR leaders.
  tags:
  - engagement
  - adp
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engagement
    port: 8080
    tools:
    - name: employee_engagement_survey_pipeline
      description: Orchestrate employee engagement survey pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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-engagement-survey-pipeline.yml

Tracks ESS portal usage from ADP, analyzes adoption in Snowflake, identifies improvement areas, and reports to product team.

naftiko: '0.5'
info:
  label: Employee Self-Service Analytics
  description: Tracks ESS portal usage from ADP, analyzes adoption in Snowflake, identifies improvement areas, and reports to product team.
  tags:
  - analytics
  - adp
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: employee_self_service_analytics
      description: Orchestrate employee self-service analytics workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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-self-service-analytics.yml

Retrieves active garnishment orders from ADP payroll, logs them in ServiceNow for legal compliance tracking, and notifies the payroll team via Slack.

naftiko: '0.5'
info:
  label: Garnishment Deduction Compliance Pipeline
  description: Retrieves active garnishment orders from ADP payroll, logs them in ServiceNow for legal compliance tracking, and notifies the payroll team via Slack.
  tags:
  - payroll
  - garnishment
  - adp
  - compliance
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payroll-garnishments
    port: 8080
    tools:
    - name: get-garnishments
      description: Look up active garnishments, log for compliance, and notify payroll team.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      steps:
      - name: fetch-garnishments
        type: call
        call: adp.get-garnishment-orders
        with:
          associate_oid: '{{associate_oid}}'
      - name: log-compliance
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Garnishment review: {{associate_oid}}'
          category: legal_compliance
          assigned_group: Payroll_Legal
          description: '{{fetch-garnishments.activeOrders}} active garnishment orders totaling {{fetch-garnishments.totalDeduction}}.'
      - name: notify-payroll
        type: call
        call: slack.post-message
        with:
          channel: '#payroll-compliance'
          text: 'Garnishment audit for {{associate_oid}}: {{fetch-garnishments.activeOrders}} active orders, total deduction {{fetch-garnishments.totalDeduction}}. ServiceNow: {{log-compliance.number}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: garnishments
      path: /workers/{{associate_oid}}/garnishments
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-garnishment-orders
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → garnishment-deduction-compliance-pipeline.yml

Detects direct deposit changes in ADP, validates against fraud patterns in Snowflake, sends verification, and logs in ServiceNow.

naftiko: '0.5'
info:
  label: Direct Deposit Change Verification Pipeline
  description: Detects direct deposit changes in ADP, validates against fraud patterns in Snowflake, sends verification, and logs in ServiceNow.
  tags:
  - security
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: direct_deposit_change_verification_pipel
      description: Orchestrate direct deposit change verification pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → direct-deposit-change-verification-pipeline.yml

Retrieves Okta user profile for ADP identity management.

naftiko: '0.5'
info:
  label: Okta User Profile Lookup
  description: Retrieves Okta user profile for ADP identity management.
  tags:
  - security
  - okta
  - identity
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-user
      description: Look up user at ADP.
      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://adp.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

Runs year-end calculations in ADP, generates W-2 forms, validates in Snowflake, files with SSA, and notifies payroll leadership.

naftiko: '0.5'
info:
  label: Year-End Processing Orchestrator
  description: Runs year-end calculations in ADP, generates W-2 forms, validates in Snowflake, files with SSA, and notifies payroll leadership.
  tags:
  - payroll
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: year_end_processing_orchestrator
      description: Orchestrate year-end processing orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → year-end-processing-orchestrator.yml

For employees working across multiple states, pulls work location data from ADP, retrieves state tax rates from Oracle, and generates a compliance report in Google Sheets with Slack notification.

naftiko: '0.5'
info:
  label: Multi-State Payroll Tax Compliance Pipeline
  description: For employees working across multiple states, pulls work location data from ADP, retrieves state tax rates from Oracle, and generates a compliance report in Google Sheets with Slack notification.
  tags:
  - payroll
  - tax
  - compliance
  - adp
  - oracle
  - google-sheets
  - slack
capability:
  exposes:
  - type: mcp
    namespace: multistate-tax
    port: 8080
    tools:
    - name: audit-multistate-tax
      description: Audit multi-state tax compliance for remote and traveling employees.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: tax_year
        in: body
        type: string
        description: The tax year to audit.
      steps:
      - name: get-work-locations
        type: call
        call: adp.get-work-locations
        with:
          associate_oid: '{{associate_oid}}'
          tax_year: '{{tax_year}}'
      - name: get-tax-rates
        type: call
        call: oracle.get-state-tax-rates
        with:
          states: '{{get-work-locations.stateList}}'
          tax_year: '{{tax_year}}'
      - name: generate-report
        type: call
        call: google-sheets.create-spreadsheet
        with:
          title: 'Multi-State Tax Audit: {{associate_oid}} - {{tax_year}}'
          data: 'States: {{get-work-locations.stateList}}, Days: {{get-work-locations.daysByState}}, Rates: {{get-tax-rates.ratesByState}}'
      - name: notify-tax-team
        type: call
        call: slack.post-message
        with:
          channel: '#tax-compliance'
          text: 'Multi-state tax audit complete for associate {{associate_oid}} ({{tax_year}}). {{get-work-locations.stateCount}} states identified. Report: {{generate-report.spreadsheetUrl}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: work-locations
      path: /workers/{{associate_oid}}/work-locations?taxYear={{tax_year}}
      inputParameters:
      - name: associate_oid
        in: path
      - name: tax_year
        in: query
      operations:
      - name: get-work-locations
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://adp-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: tax-rates
      path: /taxRates?states={{states}}&taxYear={{tax_year}}
      inputParameters:
      - name: states
        in: query
      - name: tax_year
        in: query
      operations:
      - name: get-state-tax-rates
        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: 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-state-payroll-tax-compliance-pipeline.yml

On new hire event in ADP, creates a ServiceNow equipment request, provisions Azure AD account, and assigns a Microsoft Intune device profile.

naftiko: '0.5'
info:
  label: New Hire Equipment Provisioning Pipeline
  description: On new hire event in ADP, creates a ServiceNow equipment request, provisions Azure AD account, and assigns a Microsoft Intune device profile.
  tags:
  - onboarding
  - adp
  - servicenow
  - azure-active-directory
  - microsoft-intune
capability:
  exposes:
  - type: mcp
    namespace: equipment-provisioning
    port: 8080
    tools:
    - name: provision-new-hire-equipment
      description: Provision IT equipment and accounts for a new hire based on ADP role data.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: equipment_type
        in: body
        type: string
        description: The equipment type (e.g. laptop, desktop, mobile).
      steps:
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: create-equipment-request
        type: call
        call: servicenow.create-request
        with:
          short_description: 'Equipment provisioning: {{get-employee.legalName.formattedName}}'
          category: hardware
          item: '{{equipment_type}}'
          assigned_group: IT_Provisioning
      - name: create-ad-account
        type: call
        call: azure-ad.create-user
        with:
          display_name: '{{get-employee.legalName.formattedName}}'
          mail_nickname: '{{get-employee.legalName.givenName}}.{{get-employee.legalName.familyName}}'
          department: '{{get-employee.department}}'
      - name: assign-intune-profile
        type: call
        call: intune.assign-device-profile
        with:
          user_id: '{{create-ad-account.userId}}'
          profile_name: standard_{{equipment_type}}
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.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: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: intune
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: device-profiles
      path: /deviceManagement/deviceConfigurations/{{profile_name}}/assign
      inputParameters:
      - name: profile_name
        in: path
      operations:
      - name: assign-device-profile
        method: POST
Open in Framework → View in Fleet → new-hire-equipment-provisioning-pipeline.yml

Retrieves an employee's demographic and job profile from ADP Workforce Now including name, title, department, and hire date.

naftiko: '0.5'
info:
  label: Worker Profile Lookup
  description: Retrieves an employee's demographic and job profile from ADP Workforce Now including name, title, department, and hire date.
  tags:
  - hr
  - adp
  - workforce-now
capability:
  exposes:
  - type: mcp
    namespace: hr-profile
    port: 8080
    tools:
    - name: get-worker-profile
      description: Retrieve a worker's profile by ADP associate OID. Returns legal name, job title, department, and hire date.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-worker-detail
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.workers[0].person.legalName.formattedName
      - name: job_title
        type: string
        mapping: $.workers[0].workAssignments[0].jobTitle
      - name: department
        type: string
        mapping: $.workers[0].workAssignments[0].homeOrganizationalUnits[0].nameCode.shortName
      - name: hire_date
        type: string
        mapping: $.workers[0].workAssignments[0].hireDate
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker-detail
        method: GET
Open in Framework → View in Fleet → worker-profile-lookup.yml

Validates HRIS migration data between systems, compares counts in Snowflake, creates discrepancy tickets in Jira, and notifies project team.

naftiko: '0.5'
info:
  label: HRIS Data Migration Validator
  description: Validates HRIS migration data between systems, compares counts in Snowflake, creates discrepancy tickets in Jira, and notifies project team.
  tags:
  - migration
  - snowflake
  - jira
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: migration
    port: 8080
    tools:
    - name: hris_data_migration_validator
      description: Orchestrate hris data migration validator 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-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: snowflake
    baseUri: https://adp.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://adp.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: servicenow
    baseUri: https://adp.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 → hris-data-migration-validator.yml

Compares benefits enrollment data between ADP and carrier systems, identifies discrepancies, creates cases in ServiceNow, and notifies HR.

naftiko: '0.5'
info:
  label: Employee Benefits Reconciliation Pipeline
  description: Compares benefits enrollment data between ADP and carrier systems, identifies discrepancies, creates cases in ServiceNow, and notifies HR.
  tags:
  - benefits
  - adp
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: benefits
    port: 8080
    tools:
    - name: employee_benefits_reconciliation_pipelin
      description: Orchestrate employee benefits reconciliation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp.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 → employee-benefits-reconciliation-pipeline.yml

Retrieves employee profile from Workday at ADP.

naftiko: '0.5'
info:
  label: Workday Employee Lookup
  description: Retrieves employee profile from Workday at ADP.
  tags:
  - hr
  - workday
  - employee-data
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-employee
      description: Look up Workday employee at ADP.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee_id to look up.
      call: workday.get-employee_id
      with:
        employee_id: '{{employee_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/adp
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: workday_employee_lookup
        method: GET
Open in Framework → View in Fleet → workday-employee-lookup.yml

Processes an internal employee transfer by updating the work assignment in ADP, reassigning the Jira board, moving their SharePoint folder, and notifying both old and new managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Transfer Orchestrator
  description: Processes an internal employee transfer by updating the work assignment in ADP, reassigning the Jira board, moving their SharePoint folder, and notifying both old and new managers via Microsoft Teams.
  tags:
  - hr
  - transfer
  - adp
  - jira
  - sharepoint
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-transfers
    port: 8080
    tools:
    - name: process-transfer
      description: Execute the full transfer workflow for an employee moving between departments.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: new_department
        in: body
        type: string
        description: The new department name.
      - name: effective_date
        in: body
        type: string
        description: The transfer effective date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: update-assignment
        type: call
        call: adp.update-work-assignment
        with:
          associate_oid: '{{associate_oid}}'
          department: '{{new_department}}'
          effective_date: '{{effective_date}}'
      - name: reassign-jira
        type: call
        call: jira.update-user-board
        with:
          user_email: '{{get-employee.businessCommunication.emailUri}}'
          new_board: '{{new_department}}'
      - name: move-sharepoint
        type: call
        call: sharepoint.move-folder
        with:
          site_id: department_drives
          source_path: '{{get-employee.currentDepartment}}/{{get-employee.legalName.formattedName}}'
          destination_path: '{{new_department}}/{{get-employee.legalName.formattedName}}'
      - name: notify-managers
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.reportsTo.emailUri}}'
          text: '{{get-employee.legalName.formattedName}} is transferring to {{new_department}} effective {{effective_date}}. Jira and SharePoint updated.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker
        method: GET
    - name: work-assignments
      path: /workers/{{associate_oid}}/work-assignments
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: update-work-assignment
        method: PATCH
  - type: http
    namespace: jira
    baseUri: https://adp-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: boards
      path: /board/{{new_board}}/configuration
      inputParameters:
      - name: new_board
        in: path
      operations:
      - name: update-user-board
        method: PUT
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /{{site_id}}/drive/root:/{{source_path}}
      inputParameters:
      - name: site_id
        in: path
      - name: source_path
        in: path
      operations:
      - name: move-folder
        method: PATCH
  - type: http
    namespace: 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-transfer-orchestrator.yml

Retrieves the organizational hierarchy from ADP, syncs it to Azure Active Directory group memberships, and updates the org chart visualization in SharePoint.

naftiko: '0.5'
info:
  label: Organization Chart Sync Pipeline
  description: Retrieves the organizational hierarchy from ADP, syncs it to Azure Active Directory group memberships, and updates the org chart visualization in SharePoint.
  tags:
  - hr
  - org-chart
  - adp
  - azure-active-directory
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: hr-org
    port: 8080
    tools:
    - name: get-org-chart
      description: Retrieve the reporting hierarchy, sync to Azure AD, and update SharePoint org chart.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      steps:
      - name: fetch-hierarchy
        type: call
        call: adp.get-reports-to
        with:
          associate_oid: '{{associate_oid}}'
      - name: sync-ad-groups
        type: call
        call: azure-ad.update-manager
        with:
          user_id: '{{fetch-hierarchy.workerEmail}}'
          manager_id: '{{fetch-hierarchy.managerEmail}}'
      - name: update-sharepoint
        type: call
        call: sharepoint.update-list-item
        with:
          site_id: hr_org_charts
          list_name: OrgChart
          associate_oid: '{{associate_oid}}'
          manager_name: '{{fetch-hierarchy.managerName}}'
          direct_reports: '{{fetch-hierarchy.directReportsCount}}'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: org-hierarchy
      path: /workers/{{associate_oid}}/organizational-hierarchy
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-reports-to
        method: GET
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: manager-ref
      path: /users/{{user_id}}/manager/$ref
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-manager
        method: PUT
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0/sites
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: list-items
      path: /{{site_id}}/lists/{{list_name}}/items
      inputParameters:
      - name: site_id
        in: path
      - name: list_name
        in: path
      operations:
      - name: update-list-item
        method: POST
Open in Framework → View in Fleet → organization-chart-sync-pipeline.yml

Creates client profile in ADP, provisions Salesforce account, configures ServiceNow support, sets up analytics in Snowflake, and notifies implementation.

naftiko: '0.5'
info:
  label: New Client Payroll Setup Pipeline
  description: Creates client profile in ADP, provisions Salesforce account, configures ServiceNow support, sets up analytics in Snowflake, and notifies implementation.
  tags:
  - onboarding
  - adp
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: onboarding
    port: 8080
    tools:
    - name: new_client_payroll_setup_pipeline
      description: Orchestrate new client payroll setup pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://adp.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://adp.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 → new-client-payroll-setup-pipeline.yml

Extracts HR metrics from ADP, aggregates in Snowflake, generates Power BI dashboards, identifies trends, and notifies HR leadership.

naftiko: '0.5'
info:
  label: Workforce Analytics Pipeline
  description: Extracts HR metrics from ADP, aggregates in Snowflake, generates Power BI dashboards, identifies trends, and notifies HR leadership.
  tags:
  - analytics
  - adp
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: workforce_analytics_pipeline
      description: Orchestrate workforce analytics pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → workforce-analytics-pipeline.yml

Extracts payroll journals from ADP, transforms for GL posting, loads into ERP, reconciles in Snowflake, and notifies accounting.

naftiko: '0.5'
info:
  label: Payroll Journal Integration Pipeline
  description: Extracts payroll journals from ADP, transforms for GL posting, loads into ERP, reconciles in Snowflake, and notifies accounting.
  tags:
  - finance
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: payroll_journal_integration_pipeline
      description: Orchestrate payroll journal integration pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → payroll-journal-integration-pipeline.yml

Checks overdue compliance training in Pluralsight for employees managed in ADP, sends reminder emails via Microsoft Outlook, and logs escalations in ServiceNow.

naftiko: '0.5'
info:
  label: Compliance Training Enforcement Pipeline
  description: Checks overdue compliance training in Pluralsight for employees managed in ADP, sends reminder emails via Microsoft Outlook, and logs escalations in ServiceNow.
  tags:
  - compliance
  - training
  - adp
  - pluralsight
  - microsoft-outlook
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: enforce-training-compliance
      description: Check overdue compliance training and send reminders with escalation tracking.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to check for overdue training.
      - name: course_id
        in: body
        type: string
        description: The Pluralsight course identifier for the required training.
      steps:
      - name: get-department-workers
        type: call
        call: adp.list-workers-by-department
        with:
          department: '{{department}}'
      - name: check-completions
        type: call
        call: pluralsight.get-course-completions
        with:
          course_id: '{{course_id}}'
          group_id: '{{get-department-workers.groupId}}'
      - name: send-reminders
        type: call
        call: outlook.send-mail
        with:
          to: '{{check-completions.overdueEmails}}'
          subject: 'Action Required: Overdue Compliance Training'
          body: You have overdue compliance training for course {{course_id}}. Please complete by end of week.
      - name: log-escalation
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Overdue compliance training: {{department}} - {{course_id}}'
          category: compliance
          assigned_group: HR_Compliance
          description: '{{check-completions.overdueCount}} employees in {{department}} have not completed required training {{course_id}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: department-workers
      path: /workers?$filter=department eq '{{department}}'
      inputParameters:
      - name: department
        in: query
      operations:
      - name: list-workers-by-department
        method: GET
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pluralsight_api_token
    resources:
    - name: course-completions
      path: /courses/{{course_id}}/completions?groupId={{group_id}}
      inputParameters:
      - name: course_id
        in: path
      - name: group_id
        in: query
      operations:
      - name: get-course-completions
        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-mail
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.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 → compliance-training-enforcement-pipeline.yml

When a leave request is submitted in ADP, notifies the manager via Microsoft Teams for approval and updates the request status in ADP based on the response.

naftiko: '0.5'
info:
  label: Leave Request Approval Pipeline
  description: When a leave request is submitted in ADP, notifies the manager via Microsoft Teams for approval and updates the request status in ADP based on the response.
  tags:
  - time-off
  - adp
  - microsoft-teams
  - workforce-management
capability:
  exposes:
  - type: mcp
    namespace: leave-approval
    port: 8080
    tools:
    - name: process-leave-request
      description: Process a leave request by notifying the manager and tracking approval.
      inputParameters:
      - name: leave_request_id
        in: body
        type: string
        description: The ADP leave request identifier.
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID of the requestor.
      steps:
      - name: get-leave-request
        type: call
        call: adp.get-leave-request
        with:
          leave_request_id: '{{leave_request_id}}'
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.reportsTo.emailUri}}'
          text: 'Leave request from {{get-employee.legalName.formattedName}}: {{get-leave-request.leaveType}} from {{get-leave-request.startDate}} to {{get-leave-request.endDate}} ({{get-leave-request.totalDays}} days). Please approve or deny.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/time/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: leave-requests
      path: /leave-requests/{{leave_request_id}}
      inputParameters:
      - name: leave_request_id
        in: path
      operations:
      - name: get-leave-request
        method: GET
  - type: http
    namespace: adp-hr
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        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 → leave-request-approval-pipeline.yml

When overtime is recorded in ADP time tracking, routes approval to the manager via Microsoft Teams and updates the timecard status in ADP.

naftiko: '0.5'
info:
  label: Overtime Approval Workflow
  description: When overtime is recorded in ADP time tracking, routes approval to the manager via Microsoft Teams and updates the timecard status in ADP.
  tags:
  - workforce-management
  - overtime
  - adp
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: overtime-approval
    port: 8080
    tools:
    - name: request-overtime-approval
      description: Route an overtime request for manager approval and update the ADP timecard.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: overtime_hours
        in: body
        type: string
        description: The number of overtime hours requested.
      - name: work_date
        in: body
        type: string
        description: The date of overtime in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: notify-manager
        type: call
        call: msteams.send-adaptive-card
        with:
          recipient_upn: '{{get-employee.reportsTo.emailUri}}'
          card_title: Overtime Approval Request
          card_body: '{{get-employee.legalName.formattedName}} requests {{overtime_hours}} hours OT on {{work_date}}.'
      - name: update-timecard
        type: call
        call: adp.update-timecard-note
        with:
          associate_oid: '{{associate_oid}}'
          work_date: '{{work_date}}'
          note: 'Overtime approval requested: {{overtime_hours}} hours. Manager notified.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: adp-time
    baseUri: https://api.adp.com/time/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: timecard-notes
      path: /workers/{{associate_oid}}/timecards/{{work_date}}/notes
      inputParameters:
      - name: associate_oid
        in: path
      - name: work_date
        in: path
      operations:
      - name: update-timecard-note
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: adaptive-cards
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-adaptive-card
        method: POST
Open in Framework → View in Fleet → overtime-approval-workflow.yml

Retrieves the complete job history for an employee from ADP including prior positions, departments, and effective dates.

naftiko: '0.5'
info:
  label: Employee Job History Lookup
  description: Retrieves the complete job history for an employee from ADP including prior positions, departments, and effective dates.
  tags:
  - hr
  - job-history
  - adp
  - workforce-now
capability:
  exposes:
  - type: mcp
    namespace: hr-history
    port: 8080
    tools:
    - name: get-job-history
      description: Retrieve complete job history for an employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-job-history
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: total_positions
        type: string
        mapping: $.jobHistory.length
      - name: current_title
        type: string
        mapping: $.jobHistory[0].jobTitle
      - name: current_department
        type: string
        mapping: $.jobHistory[0].department
      - name: original_hire_date
        type: string
        mapping: $.jobHistory[-1].effectiveDate
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: job-history
      path: /workers/{{associate_oid}}/job-history
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-job-history
        method: GET
Open in Framework → View in Fleet → employee-job-history-lookup.yml

Sends a message to a Slack channel for ADP notifications.

naftiko: '0.5'
info:
  label: Slack Channel Post
  description: Sends a message to a Slack channel for ADP notifications.
  tags:
  - collaboration
  - slack
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: messaging
    port: 8080
    tools:
    - name: send-message
      description: Post to Slack at ADP.
      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

Retrieves a W-2 tax document from ADP, archives it in SharePoint for document retention, and sends the employee a notification via Microsoft Outlook.

naftiko: '0.5'
info:
  label: W-2 Document Retrieval and Archive Pipeline
  description: Retrieves a W-2 tax document from ADP, archives it in SharePoint for document retention, and sends the employee a notification via Microsoft Outlook.
  tags:
  - payroll
  - tax
  - adp
  - sharepoint
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: tax-documents
    port: 8080
    tools:
    - name: get-w2-document
      description: Retrieve a W-2, archive in SharePoint, and notify the employee.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: tax_year
        in: body
        type: string
        description: The tax year (e.g. 2025).
      steps:
      - name: fetch-w2
        type: call
        call: adp.get-w2
        with:
          associate_oid: '{{associate_oid}}'
          tax_year: '{{tax_year}}'
      - name: archive-document
        type: call
        call: sharepoint.upload-file
        with:
          site_id: tax_documents_site
          folder_path: W2/{{tax_year}}/{{associate_oid}}
          file_name: W2_{{tax_year}}_{{associate_oid}}.pdf
      - name: notify-employee
        type: call
        call: outlook.send-mail
        with:
          to: '{{fetch-w2.workerEmail}}'
          subject: Your {{tax_year}} W-2 is Available
          body: 'Your W-2 for tax year {{tax_year}} is now available. Wages: {{fetch-w2.wages}}. Federal tax withheld: {{fetch-w2.federalTaxWithheld}}. Document archived in SharePoint.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: w2-documents
      path: /workers/{{associate_oid}}/tax-documents/w2?taxYear={{tax_year}}
      inputParameters:
      - name: associate_oid
        in: path
      - name: tax_year
        in: query
      operations:
      - name: get-w2
        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: upload-file
        method: PUT
  - 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 → w-2-document-retrieval-and-archive-pipeline.yml

Pulls active headcount data from ADP and pushes it to Power BI for real-time workforce analytics dashboards, then notifies HR leadership via Slack.

naftiko: '0.5'
info:
  label: Workforce Headcount Dashboard Sync
  description: Pulls active headcount data from ADP and pushes it to Power BI for real-time workforce analytics dashboards, then notifies HR leadership via Slack.
  tags:
  - workforce-management
  - adp
  - power-bi
  - slack
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: workforce-analytics
    port: 8080
    tools:
    - name: sync-headcount-dashboard
      description: Sync current ADP headcount data to Power BI and notify stakeholders.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: The date for the headcount snapshot in YYYY-MM-DD format.
      steps:
      - name: get-headcount
        type: call
        call: adp.get-workforce-analytics
        with:
          report_type: headcount
          as_of_date: '{{as_of_date}}'
      - name: push-to-powerbi
        type: call
        call: powerbi.push-dataset-rows
        with:
          dataset_id: workforce_headcount
          table_name: headcount_daily
          rows: '{{get-headcount.data}}'
      - name: notify-hr
        type: call
        call: slack.post-message
        with:
          channel: '#hr-analytics'
          text: 'Workforce headcount dashboard updated for {{as_of_date}}. Total active: {{get-headcount.totalActive}}. Power BI refresh complete.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workforce-analytics
      path: /reports/{{report_type}}?asOfDate={{as_of_date}}
      inputParameters:
      - name: report_type
        in: path
      - name: as_of_date
        in: query
      operations:
      - name: get-workforce-analytics
        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-dataset-rows
        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 → workforce-headcount-dashboard-sync.yml

Triggers Power BI dataset refresh for ADP reporting.

naftiko: '0.5'
info:
  label: Power BI Refresh Trigger
  description: Triggers Power BI dataset refresh for ADP reporting.
  tags:
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: trigger-refresh
      description: Trigger refresh at ADP.
      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

Generates standard payroll reports from ADP data in Snowflake, publishes to Power BI, distributes via email, and notifies stakeholders.

naftiko: '0.5'
info:
  label: Payroll Reporting Automation Pipeline
  description: Generates standard payroll reports from ADP data in Snowflake, publishes to Power BI, distributes via email, and notifies stakeholders.
  tags:
  - reporting
  - adp
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: reporting
    port: 8080
    tools:
    - name: payroll_reporting_automation_pipeline
      description: Orchestrate payroll reporting automation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → payroll-reporting-automation-pipeline.yml

Monitors timecard patterns from ADP, detects anomalies in Snowflake, creates investigation cases, and notifies managers.

naftiko: '0.5'
info:
  label: Time and Attendance Anomaly Detector
  description: Monitors timecard patterns from ADP, detects anomalies in Snowflake, creates investigation cases, and notifies managers.
  tags:
  - workforce
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: workforce
    port: 8080
    tools:
    - name: time_and_attendance_anomaly_detector
      description: Orchestrate time and attendance anomaly detector workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → time-and-attendance-anomaly-detector.yml

Searches for employees in ADP Workforce Now by name or employee ID and returns matching worker records.

naftiko: '0.5'
info:
  label: ADP Worker Search
  description: Searches for employees in ADP Workforce Now by name or employee ID and returns matching worker records.
  tags:
  - hr
  - search
  - adp
  - workforce-now
capability:
  exposes:
  - type: mcp
    namespace: hr-search
    port: 8080
    tools:
    - name: search-workers
      description: Search for workers in ADP by name or employee number.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: The name or employee ID to search for.
      call: adp.search-workers
      with:
        search_term: '{{search_term}}'
      outputParameters:
      - name: total_results
        type: string
        mapping: $.workers.length
      - name: first_match_name
        type: string
        mapping: $.workers[0].person.legalName.formattedName
      - name: first_match_oid
        type: string
        mapping: $.workers[0].associateOID
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: worker-search
      path: /workers?$filter=contains(person/legalName,'{{search_term}}')
      inputParameters:
      - name: search_term
        in: query
      operations:
      - name: search-workers
        method: GET
Open in Framework → View in Fleet → adp-worker-search.yml

On new hire creation in ADP Workforce Now, provisions a SharePoint folder for documents, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message.

naftiko: '0.5'
info:
  label: New Hire Onboarding Orchestrator
  description: On new hire creation in ADP Workforce Now, provisions a SharePoint folder for documents, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message.
  tags:
  - hr
  - onboarding
  - adp
  - sharepoint
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-onboarding
      description: Given an ADP associate OID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID for the new hire.
      - name: start_date
        in: body
        type: string
        description: The employee start date in YYYY-MM-DD format.
      - name: department
        in: body
        type: string
        description: The department the new hire is joining.
      steps:
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: open-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'New hire onboarding: {{get-employee.legalName.formattedName}}'
          category: hr_onboarding
          assigned_group: IT_Onboarding
          description: Onboarding for {{get-employee.legalName.formattedName}} 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.legalName.formattedName}}_{{start_date}}
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.businessCommunication.emailUri}}'
          text: Welcome aboard! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}.
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.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-hire-onboarding-orchestrator.yml

Calculates union dues from ADP payroll, reconciles with union records, generates remittance, and notifies labor relations team.

naftiko: '0.5'
info:
  label: Union Dues Processing Pipeline
  description: Calculates union dues from ADP payroll, reconciles with union records, generates remittance, and notifies labor relations team.
  tags:
  - labor-relations
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: labor-relations
    port: 8080
    tools:
    - name: union_dues_processing_pipeline
      description: Orchestrate union dues processing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → union-dues-processing-pipeline.yml

Extracts workforce demographics from ADP, aggregates data in Databricks, publishes to Power BI dashboards, and shares the report link in Microsoft Teams.

naftiko: '0.5'
info:
  label: Diversity and Inclusion Reporting Pipeline
  description: Extracts workforce demographics from ADP, aggregates data in Databricks, publishes to Power BI dashboards, and shares the report link in Microsoft Teams.
  tags:
  - hr
  - analytics
  - adp
  - databricks
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dei-reporting
    port: 8080
    tools:
    - name: generate-dei-report
      description: Generate a diversity and inclusion report from ADP workforce data.
      inputParameters:
      - name: report_period
        in: body
        type: string
        description: The reporting period (e.g. Q1-2026).
      - name: scope
        in: body
        type: string
        description: The organizational scope (e.g. company-wide, division, department).
      steps:
      - name: extract-demographics
        type: call
        call: adp.get-demographics-report
        with:
          report_period: '{{report_period}}'
          scope: '{{scope}}'
      - name: run-aggregation
        type: call
        call: databricks.submit-job
        with:
          job_name: dei_analytics
          parameters: data={{extract-demographics.reportUri}}&period={{report_period}}
      - name: refresh-dashboard
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: dei_dashboard
      - name: share-report
        type: call
        call: msteams.send-channel-message
        with:
          team_id: hr_leadership
          channel: dei-reports
          text: 'D&I report for {{report_period}} ({{scope}}) is ready. Dashboard refreshed. Key metrics: {{extract-demographics.summaryStats}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: demographics-reports
      path: /reports/demographics?period={{report_period}}&scope={{scope}}
      inputParameters:
      - name: report_period
        in: query
      - name: scope
        in: query
      operations:
      - name: get-demographics-report
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adp-workspace.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: submit-job
        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: 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 → diversity-and-inclusion-reporting-pipeline.yml

Retrieves timecard submission status from ADP, checks for missing submissions, and notifies the manager via Microsoft Teams if the timecard is incomplete.

naftiko: '0.5'
info:
  label: Timecard Status and Manager Notification
  description: Retrieves timecard submission status from ADP, checks for missing submissions, and notifies the manager via Microsoft Teams if the timecard is incomplete.
  tags:
  - time-attendance
  - adp
  - workforce-management
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: time-attendance
    port: 8080
    tools:
    - name: get-timecard-status
      description: Check timecard submission status and notify the manager if incomplete.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: pay_period_end
        in: body
        type: string
        description: The pay period end date in YYYY-MM-DD format.
      steps:
      - name: fetch-timecard
        type: call
        call: adp.get-timecard
        with:
          associate_oid: '{{associate_oid}}'
          pay_period_end: '{{pay_period_end}}'
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.reportsTo.emailUri}}'
          text: 'Timecard status for {{get-employee.legalName.formattedName}} (period ending {{pay_period_end}}): {{fetch-timecard.status}}. Total hours: {{fetch-timecard.totalHours}}, OT: {{fetch-timecard.overtimeHours}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/time/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: timecards
      path: /workers/{{associate_oid}}/timecards?periodEnd={{pay_period_end}}
      inputParameters:
      - name: associate_oid
        in: path
      - name: pay_period_end
        in: query
      operations:
      - name: get-timecard
        method: GET
  - type: http
    namespace: adp-hr
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        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 → timecard-status-and-manager-notification.yml

Initiates a performance review cycle by pulling employee data from ADP, creating review documents in Google Docs, assigning tasks in Jira, and notifying managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: Performance Review Cycle Orchestrator
  description: Initiates a performance review cycle by pulling employee data from ADP, creating review documents in Google Docs, assigning tasks in Jira, and notifying managers via Microsoft Teams.
  tags:
  - talent
  - performance
  - adp
  - google-docs
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-performance
    port: 8080
    tools:
    - name: initiate-review-cycle
      description: Kick off a performance review cycle for a department.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department for the review cycle.
      - name: review_period
        in: body
        type: string
        description: The review period label (e.g. Q1-2026).
      steps:
      - name: get-department-roster
        type: call
        call: adp.list-workers-by-department
        with:
          department: '{{department}}'
      - name: create-review-template
        type: call
        call: google-docs.create-document
        with:
          title: Performance Review {{review_period}} - {{department}}
          template_id: perf_review_template
      - name: create-jira-epic
        type: call
        call: jira.create-issue
        with:
          project: PERF
          summary: 'Performance Reviews: {{department}} - {{review_period}}'
          issue_type: Epic
          description: Track {{get-department-roster.totalCount}} reviews for {{department}} during {{review_period}}.
      - name: notify-managers
        type: call
        call: msteams.send-channel-message
        with:
          team_id: hr_management
          channel: performance-reviews
          text: 'Performance review cycle initiated for {{department}} ({{review_period}}). {{get-department-roster.totalCount}} employees. Jira epic: {{create-jira-epic.key}}. Template: {{create-review-template.url}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: department-workers
      path: /workers?$filter=department eq '{{department}}'
      inputParameters:
      - name: department
        in: query
      operations:
      - name: list-workers-by-department
        method: GET
  - type: http
    namespace: google-docs
    baseUri: https://docs.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_docs_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: jira
    baseUri: https://adp-corp.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}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → performance-review-cycle-orchestrator.yml

Tracks service delivery metrics from ServiceNow, calculates SLA compliance in Snowflake, updates Grafana dashboards, and alerts account managers.

naftiko: '0.5'
info:
  label: Client SLA Monitoring Pipeline
  description: Tracks service delivery metrics from ServiceNow, calculates SLA compliance in Snowflake, updates Grafana dashboards, and alerts account managers.
  tags:
  - service-delivery
  - servicenow
  - snowflake
  - grafana
  - slack
capability:
  exposes:
  - type: mcp
    namespace: service-delivery
    port: 8080
    tools:
    - name: client_sla_monitoring_pipeline
      description: Orchestrate client sla monitoring pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          resource_id: '{{resource_id}}'
      - name: create-grafana
        type: call
        call: grafana.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: servicenow
    baseUri: https://adp.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: snowflake
    baseUri: https://adp.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: grafana
    baseUri: https://adp-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-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 → client-sla-monitoring-pipeline.yml

Retrieves Salesforce account details for ADP sales teams.

naftiko: '0.5'
info:
  label: Salesforce Account Info
  description: Retrieves Salesforce account details for ADP sales teams.
  tags:
  - crm
  - salesforce
  - accounts
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-account
      description: Look up account at ADP.
      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://adp.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

During benefits open enrollment, sends personalized emails via MailChimp with current plan details from ADP, tracks opens in Google Analytics, and logs activity in Salesforce.

naftiko: '0.5'
info:
  label: Open Enrollment Campaign Orchestrator
  description: During benefits open enrollment, sends personalized emails via MailChimp with current plan details from ADP, tracks opens in Google Analytics, and logs activity in Salesforce.
  tags:
  - benefits
  - open-enrollment
  - adp
  - mailchimp
  - google-analytics
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: open-enrollment
    port: 8080
    tools:
    - name: launch-enrollment-campaign
      description: Launch a personalized open enrollment campaign for a specific employee segment.
      inputParameters:
      - name: segment_id
        in: body
        type: string
        description: The employee segment identifier for targeting.
      - name: plan_year
        in: body
        type: string
        description: The benefits plan year (e.g. 2026).
      steps:
      - name: get-segment-employees
        type: call
        call: adp.list-workers-by-segment
        with:
          segment_id: '{{segment_id}}'
      - name: send-campaign
        type: call
        call: mailchimp.send-campaign
        with:
          list_id: '{{get-segment-employees.listId}}'
          template_id: open_enrollment_{{plan_year}}
          subject: Your {{plan_year}} Benefits Open Enrollment Is Now Open
      - name: log-campaign
        type: call
        call: salesforce.create-campaign-activity
        with:
          campaign_name: OE_{{plan_year}}_{{segment_id}}
          status: sent
          recipient_count: '{{get-segment-employees.totalCount}}'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: worker-segments
      path: /workers?$filter=segment eq '{{segment_id}}'
      inputParameters:
      - name: segment_id
        in: query
      operations:
      - name: list-workers-by-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
  - type: http
    namespace: salesforce
    baseUri: https://adp.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaign-activities
      path: /sobjects/CampaignMember
      operations:
      - name: create-campaign-activity
        method: POST
Open in Framework → View in Fleet → open-enrollment-campaign-orchestrator.yml

Retrieves the current work assignment details for an employee from ADP including location, shift, and assignment status.

naftiko: '0.5'
info:
  label: Employee Work Assignment Lookup
  description: Retrieves the current work assignment details for an employee from ADP including location, shift, and assignment status.
  tags:
  - hr
  - work-assignment
  - adp
  - workforce-now
capability:
  exposes:
  - type: mcp
    namespace: hr-assignments
    port: 8080
    tools:
    - name: get-work-assignment
      description: Retrieve work assignment details for an employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-assignment
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: work_location
        type: string
        mapping: $.workAssignment.location.nameCode.shortName
      - name: shift
        type: string
        mapping: $.workAssignment.shiftCode
      - name: status
        type: string
        mapping: $.workAssignment.assignmentStatus
      - name: full_part_time
        type: string
        mapping: $.workAssignment.fullTimeOrPartTime
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: work-assignments
      path: /workers/{{associate_oid}}/work-assignments
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-assignment
        method: GET
Open in Framework → View in Fleet → employee-work-assignment-lookup.yml

Pulls benefits enrollment data from ADP and cost data from Oracle, merges them in Databricks for per-employee cost analysis, and publishes results to Power BI.

naftiko: '0.5'
info:
  label: Benefits Cost Analysis Pipeline
  description: Pulls benefits enrollment data from ADP and cost data from Oracle, merges them in Databricks for per-employee cost analysis, and publishes results to Power BI.
  tags:
  - benefits
  - analytics
  - adp
  - oracle
  - databricks
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: benefits-analytics
    port: 8080
    tools:
    - name: analyze-benefits-cost
      description: Run a benefits cost analysis combining ADP enrollment data with Oracle financials.
      inputParameters:
      - name: plan_year
        in: body
        type: string
        description: The benefits plan year to analyze.
      - name: department
        in: body
        type: string
        description: The department to scope the analysis.
      steps:
      - name: get-enrollment-data
        type: call
        call: adp.get-enrollment-report
        with:
          plan_year: '{{plan_year}}'
          department: '{{department}}'
      - name: get-cost-data
        type: call
        call: oracle.get-benefits-costs
        with:
          fiscal_year: '{{plan_year}}'
          cost_center: '{{department}}'
      - name: run-analysis
        type: call
        call: databricks.submit-job
        with:
          job_name: benefits_cost_analysis
          parameters: enrollment={{get-enrollment-data.reportUri}}&costs={{get-cost-data.reportUri}}
      - name: publish-results
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: benefits_cost_dashboard
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: enrollment-reports
      path: /reports/benefit-enrollment?planYear={{plan_year}}&department={{department}}
      inputParameters:
      - name: plan_year
        in: query
      - name: department
        in: query
      operations:
      - name: get-enrollment-report
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://adp-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: benefits-costs
      path: /benefitsCosts?fiscalYear={{fiscal_year}}&costCenter={{cost_center}}
      inputParameters:
      - name: fiscal_year
        in: query
      - name: cost_center
        in: query
      operations:
      - name: get-benefits-costs
        method: GET
  - type: http
    namespace: databricks
    baseUri: https://adp-workspace.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/run-now
      operations:
      - name: submit-job
        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 → benefits-cost-analysis-pipeline.yml

Monitors ADP API health via Datadog, checks data sync status, creates alerts in PagerDuty, logs in ServiceNow, and notifies IT.

naftiko: '0.5'
info:
  label: HR System Integration Health Monitor
  description: Monitors ADP API health via Datadog, checks data sync status, creates alerts in PagerDuty, logs in ServiceNow, and notifies IT.
  tags:
  - integration
  - datadog
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: integration
    port: 8080
    tools:
    - name: hr_system_integration_health_monitor
      description: Orchestrate hr system integration health monitor 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-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: 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: servicenow
    baseUri: https://adp.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 → hr-system-integration-health-monitor.yml

When a payroll run completes in ADP, compares gross pay against SAP cost center budgets and posts a Slack alert if the variance exceeds the threshold.

naftiko: '0.5'
info:
  label: Payroll Discrepancy Alert Pipeline
  description: When a payroll run completes in ADP, compares gross pay against SAP cost center budgets and posts a Slack alert if the variance exceeds the threshold.
  tags:
  - payroll
  - adp
  - sap
  - slack
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: payroll-audit
    port: 8080
    tools:
    - name: check-payroll-variance
      description: Compare a completed payroll run against cost center budgets and alert on variances exceeding the threshold.
      inputParameters:
      - name: pay_run_id
        in: body
        type: string
        description: The ADP payroll run identifier.
      - name: variance_threshold
        in: body
        type: string
        description: Maximum allowed variance percentage before alerting.
      steps:
      - name: get-payroll-totals
        type: call
        call: adp.get-payroll-run
        with:
          pay_run_id: '{{pay_run_id}}'
      - name: get-budget
        type: call
        call: sap.get-cost-center-budget
        with:
          cost_center: '{{get-payroll-totals.costCenterCode}}'
          fiscal_period: '{{get-payroll-totals.payPeriod}}'
      - name: notify-variance
        type: call
        call: slack.post-message
        with:
          channel: '#payroll-alerts'
          text: 'Payroll variance alert: Run {{pay_run_id}} total {{get-payroll-totals.grossTotal}} vs budget {{get-budget.plannedAmount}}. Variance exceeds {{variance_threshold}}%.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: payroll-runs
      path: /pay-runs/{{pay_run_id}}
      inputParameters:
      - name: pay_run_id
        in: path
      operations:
      - name: get-payroll-run
        method: GET
  - type: http
    namespace: sap
    baseUri: https://adp-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-budgets
      path: /A_CostCenter('{{cost_center}}')/to_Budget(FiscalPeriod='{{fiscal_period}}')
      inputParameters:
      - name: cost_center
        in: path
      - name: fiscal_period
        in: path
      operations:
      - name: get-cost-center-budget
        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 → payroll-discrepancy-alert-pipeline.yml

Searches Splunk indexes for log entries at ADP.

naftiko: '0.5'
info:
  label: Splunk Log Search
  description: Searches Splunk indexes for log entries at ADP.
  tags:
  - devops
  - splunk
  - logging
capability:
  exposes:
  - type: mcp
    namespace: logging
    port: 8080
    tools:
    - name: search-logs
      description: Search Splunk logs for ADP.
      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://adp-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

Receives claim from ADP, validates employment, creates case in ServiceNow, calculates exposure in Snowflake, and notifies risk management.

naftiko: '0.5'
info:
  label: Workers Comp Claims Processor
  description: Receives claim from ADP, validates employment, creates case in ServiceNow, calculates exposure in Snowflake, and notifies risk management.
  tags:
  - insurance
  - adp
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: insurance
    port: 8080
    tools:
    - name: workers_comp_claims_processor
      description: Orchestrate workers comp claims processor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp.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: snowflake
    baseUri: https://adp.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 → workers-comp-claims-processor.yml

Generates a compliance audit report by pulling employee data from ADP, cross-referencing with SailPoint access records, producing a report in Google Docs, and filing it in Box.

naftiko: '0.5'
info:
  label: Compliance Audit Report Generator
  description: Generates a compliance audit report by pulling employee data from ADP, cross-referencing with SailPoint access records, producing a report in Google Docs, and filing it in Box.
  tags:
  - compliance
  - audit
  - adp
  - sailpoint
  - google-docs
  - box
capability:
  exposes:
  - type: mcp
    namespace: compliance-audit
    port: 8080
    tools:
    - name: generate-audit-report
      description: Generate a compliance audit report cross-referencing ADP employee data with SailPoint access.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to audit.
      - name: audit_date
        in: body
        type: string
        description: The audit date in YYYY-MM-DD format.
      steps:
      - name: get-employees
        type: call
        call: adp.list-workers-by-department
        with:
          department: '{{department}}'
      - name: get-access-records
        type: call
        call: sailpoint.get-access-review
        with:
          group: '{{department}}'
          review_date: '{{audit_date}}'
      - name: create-report
        type: call
        call: google-docs.create-document
        with:
          title: 'Compliance Audit: {{department}} - {{audit_date}}'
          body: 'Audit of {{get-employees.totalCount}} employees. Access review status: {{get-access-records.status}}. Findings: {{get-access-records.findingsCount}} discrepancies.'
      - name: file-in-box
        type: call
        call: box.upload-file
        with:
          folder_id: compliance_audits
          file_name: audit_{{department}}_{{audit_date}}.pdf
          content_url: '{{create-report.exportUrl}}'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: department-workers
      path: /workers?$filter=department eq '{{department}}'
      inputParameters:
      - name: department
        in: query
      operations:
      - name: list-workers-by-department
        method: GET
  - type: http
    namespace: sailpoint
    baseUri: https://adp-corp.api.identitynow.com/v3
    authentication:
      type: bearer
      token: $secrets.sailpoint_token
    resources:
    - name: access-reviews
      path: /access-reviews?group={{group}}&reviewDate={{review_date}}
      inputParameters:
      - name: group
        in: query
      - name: review_date
        in: query
      operations:
      - name: get-access-review
        method: GET
  - type: http
    namespace: google-docs
    baseUri: https://docs.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_docs_token
    resources:
    - name: documents
      path: /documents
      operations:
      - name: create-document
        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 → compliance-audit-report-generator.yml

Retrieves direct deposit configuration from ADP, logs the access event in Splunk for security auditing, and sends a confirmation to the employee via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Direct Deposit Audit and Notification Pipeline
  description: Retrieves direct deposit configuration from ADP, logs the access event in Splunk for security auditing, and sends a confirmation to the employee via Microsoft Outlook.
  tags:
  - payroll
  - direct-deposit
  - adp
  - splunk
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: payroll-banking
    port: 8080
    tools:
    - name: get-direct-deposit
      description: Look up direct deposit accounts, log the audit event, and notify the employee.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      steps:
      - name: fetch-deposits
        type: call
        call: adp.get-deposit-accounts
        with:
          associate_oid: '{{associate_oid}}'
      - name: log-audit-event
        type: call
        call: splunk.send-event
        with:
          index: payroll_audit
          event: direct_deposit_access
          associate_oid: '{{associate_oid}}'
          account_count: '{{fetch-deposits.accountCount}}'
      - name: notify-employee
        type: call
        call: outlook.send-mail
        with:
          to: '{{fetch-deposits.workerEmail}}'
          subject: Direct Deposit Information Accessed
          body: 'Your direct deposit information was accessed. {{fetch-deposits.accountCount}} accounts on file. Primary bank: {{fetch-deposits.primaryBank}}. If this was not you, contact HR.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: deposit-accounts
      path: /workers/{{associate_oid}}/direct-deposits
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-deposit-accounts
        method: GET
  - type: http
    namespace: splunk
    baseUri: https://adp-splunk.splunkcloud.com:8088
    authentication:
      type: bearer
      token: $secrets.splunk_hec_token
    resources:
    - name: events
      path: /services/collector/event
      operations:
      - name: send-event
        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 → direct-deposit-audit-and-notification-pipeline.yml

Searches Elasticsearch indexes for ADP.

naftiko: '0.5'
info:
  label: Elasticsearch Log Query
  description: Searches Elasticsearch indexes for ADP.
  tags:
  - data
  - elasticsearch
  - search
capability:
  exposes:
  - type: mcp
    namespace: search
    port: 8080
    tools:
    - name: search-logs
      description: Search ES logs at ADP.
      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://adp-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

Analyzes turnover data from ADP analytics, compares against thresholds stored in Google Sheets, and posts alerts to Slack and creates a Jira ticket when turnover exceeds targets.

naftiko: '0.5'
info:
  label: Workforce Turnover Alert Pipeline
  description: Analyzes turnover data from ADP analytics, compares against thresholds stored in Google Sheets, and posts alerts to Slack and creates a Jira ticket when turnover exceeds targets.
  tags:
  - workforce-management
  - analytics
  - adp
  - google-sheets
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: turnover-alerts
    port: 8080
    tools:
    - name: check-turnover-rate
      description: Check workforce turnover against targets and alert if thresholds are breached.
      inputParameters:
      - name: department
        in: body
        type: string
        description: The department to analyze.
      - name: period
        in: body
        type: string
        description: The reporting period (e.g. Q1-2026).
      steps:
      - name: get-turnover-data
        type: call
        call: adp.get-turnover-report
        with:
          department: '{{department}}'
          period: '{{period}}'
      - name: get-targets
        type: call
        call: google-sheets.get-range
        with:
          spreadsheet_id: turnover_targets_2026
          range: Targets!A:C
      - name: post-alert
        type: call
        call: slack.post-message
        with:
          channel: '#hr-analytics'
          text: 'Turnover alert: {{department}} at {{get-turnover-data.turnoverRate}}% for {{period}} (target: {{get-targets.targetRate}}%). {{get-turnover-data.separationCount}} separations.'
      - name: create-action-item
        type: call
        call: jira.create-issue
        with:
          project: HR
          summary: 'High turnover: {{department}} - {{period}}'
          issue_type: Task
          description: Turnover rate {{get-turnover-data.turnoverRate}}% exceeds target {{get-targets.targetRate}}%. Review retention strategies.
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: turnover-reports
      path: /reports/turnover?department={{department}}&period={{period}}
      inputParameters:
      - name: department
        in: query
      - name: period
        in: query
      operations:
      - name: get-turnover-report
        method: GET
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheet-values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: get-range
        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
  - type: http
    namespace: jira
    baseUri: https://adp-corp.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 → workforce-turnover-alert-pipeline.yml

Receives garnishment orders, validates in ADP, calculates deductions, creates compliance records in ServiceNow, and notifies payroll.

naftiko: '0.5'
info:
  label: Garnishment Processing Pipeline
  description: Receives garnishment orders, validates in ADP, calculates deductions, creates compliance records in ServiceNow, and notifies payroll.
  tags:
  - compliance
  - adp
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: garnishment_processing_pipeline
      description: Orchestrate garnishment processing pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp.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: snowflake
    baseUri: https://adp.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 → garnishment-processing-pipeline.yml

When a candidate advances in ADP Recruiting, checks interviewer availability in Microsoft Outlook, books a Zoom meeting, and updates the candidate status in ADP.

naftiko: '0.5'
info:
  label: Candidate Interview Scheduling Pipeline
  description: When a candidate advances in ADP Recruiting, checks interviewer availability in Microsoft Outlook, books a Zoom meeting, and updates the candidate status in ADP.
  tags:
  - talent
  - recruiting
  - adp
  - microsoft-outlook
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: interview-scheduling
    port: 8080
    tools:
    - name: schedule-interview
      description: Schedule a candidate interview by checking availability, booking a meeting, and updating ADP.
      inputParameters:
      - name: candidate_id
        in: body
        type: string
        description: The ADP candidate identifier.
      - name: interviewer_email
        in: body
        type: string
        description: The interviewer's email address.
      - name: interview_date
        in: body
        type: string
        description: The preferred interview date in YYYY-MM-DD format.
      steps:
      - name: get-candidate
        type: call
        call: adp.get-candidate
        with:
          candidate_id: '{{candidate_id}}'
      - name: check-availability
        type: call
        call: outlook.get-free-busy
        with:
          user_email: '{{interviewer_email}}'
          date: '{{interview_date}}'
      - name: create-zoom-meeting
        type: call
        call: zoom.create-meeting
        with:
          topic: 'Interview: {{get-candidate.fullName}} - {{get-candidate.requisitionTitle}}'
          start_time: '{{check-availability.firstAvailableSlot}}'
          duration: 60
          host_email: '{{interviewer_email}}'
      - name: update-candidate-status
        type: call
        call: adp.update-candidate
        with:
          candidate_id: '{{candidate_id}}'
          status: interview_scheduled
          notes: Zoom meeting {{create-zoom-meeting.meetingId}} scheduled for {{check-availability.firstAvailableSlot}}.
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/staffing/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: candidates
      path: /candidates/{{candidate_id}}
      inputParameters:
      - name: candidate_id
        in: path
      operations:
      - name: get-candidate
        method: GET
      - name: update-candidate
        method: PATCH
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: calendar
      path: /users/{{user_email}}/calendar/getSchedule
      inputParameters:
      - name: user_email
        in: path
      operations:
      - name: get-free-busy
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_jwt_token
    resources:
    - name: meetings
      path: /users/{{host_email}}/meetings
      inputParameters:
      - name: host_email
        in: path
      operations:
      - name: create-meeting
        method: POST
Open in Framework → View in Fleet → candidate-interview-scheduling-pipeline.yml

Processes LOA request in ADP, validates FMLA eligibility, adjusts benefits, creates case in ServiceNow, and notifies HR and manager.

naftiko: '0.5'
info:
  label: Leave of Absence Orchestrator
  description: Processes LOA request in ADP, validates FMLA eligibility, adjusts benefits, creates case in ServiceNow, and notifies HR and manager.
  tags:
  - hr
  - adp
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: leave_of_absence_orchestrator
      description: Orchestrate leave of absence orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp.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 → leave-of-absence-orchestrator.yml

Monitors payroll transactions in ADP, runs anomaly detection in Snowflake, creates investigation cases, and escalates suspicious activity.

naftiko: '0.5'
info:
  label: Payroll Fraud Detection Pipeline
  description: Monitors payroll transactions in ADP, runs anomaly detection in Snowflake, creates investigation cases, and escalates suspicious activity.
  tags:
  - security
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: payroll_fraud_detection_pipeline
      description: Orchestrate payroll fraud detection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → payroll-fraud-detection-pipeline.yml

Extracts 401k contributions from ADP, reconciles with plan administrator, identifies variances, and notifies benefits team.

naftiko: '0.5'
info:
  label: Retirement Plan Contribution Reconciliation
  description: Extracts 401k contributions from ADP, reconciles with plan administrator, identifies variances, and notifies benefits team.
  tags:
  - benefits
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: benefits
    port: 8080
    tools:
    - name: retirement_plan_contribution_reconciliat
      description: Orchestrate retirement plan contribution reconciliation workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → retirement-plan-contribution-reconciliation.yml

Retrieves pending event notifications from ADP such as new hires, terminations, and status changes.

naftiko: '0.5'
info:
  label: ADP Event Notification Lookup
  description: Retrieves pending event notifications from ADP such as new hires, terminations, and status changes.
  tags:
  - hr
  - events
  - adp
  - workforce-now
capability:
  exposes:
  - type: mcp
    namespace: hr-events
    port: 8080
    tools:
    - name: get-event-notifications
      description: Retrieve pending HR event notifications from ADP.
      inputParameters:
      - name: event_type
        in: body
        type: string
        description: The event type filter (e.g. new-hire, termination, status-change).
      - name: since_date
        in: body
        type: string
        description: The start date for event retrieval in YYYY-MM-DD format.
      call: adp.get-events
      with:
        event_type: '{{event_type}}'
        since_date: '{{since_date}}'
      outputParameters:
      - name: event_count
        type: string
        mapping: $.events.length
      - name: latest_event_type
        type: string
        mapping: $.events[0].eventType
      - name: latest_event_date
        type: string
        mapping: $.events[0].eventDate
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/core/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: event-notifications
      path: /event-notification-messages?eventType={{event_type}}&sinceDate={{since_date}}
      inputParameters:
      - name: event_type
        in: query
      - name: since_date
        in: query
      operations:
      - name: get-events
        method: GET
Open in Framework → View in Fleet → adp-event-notification-lookup.yml

Processes termination in ADP, calculates final pay, disables system access via Okta, creates offboarding tasks in ServiceNow, and notifies HR.

naftiko: '0.5'
info:
  label: Employee Separation Processor
  description: Processes termination in ADP, calculates final pay, disables system access via Okta, creates offboarding tasks in ServiceNow, and notifies HR.
  tags:
  - hr
  - adp
  - okta
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: employee_separation_processor
      description: Orchestrate employee separation processor workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-okta
        type: call
        call: okta.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: okta
    baseUri: https://adp.okta.com/api/v1
    authentication:
      type: apiKey
      key: $secrets.okta_api_token
      header: Authorization
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: okta-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://adp.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 → employee-separation-processor.yml

Executes SQL queries against ADP Snowflake warehouse.

naftiko: '0.5'
info:
  label: Snowflake Query Executor
  description: Executes SQL queries against ADP Snowflake warehouse.
  tags:
  - data
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-query
      description: Run query at ADP.
      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://adp.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

Pulls quarterly payroll tax data from ADP, reconciles against Oracle general ledger entries, generates a reconciliation report in Google Sheets, and notifies the finance team via Slack.

naftiko: '0.5'
info:
  label: Quarterly Payroll Tax Reconciliation Pipeline
  description: Pulls quarterly payroll tax data from ADP, reconciles against Oracle general ledger entries, generates a reconciliation report in Google Sheets, and notifies the finance team via Slack.
  tags:
  - payroll
  - tax
  - adp
  - oracle
  - google-sheets
  - slack
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: tax-reconciliation
    port: 8080
    tools:
    - name: reconcile-quarterly-taxes
      description: Reconcile quarterly payroll taxes between ADP and Oracle GL.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: The fiscal quarter (e.g. Q1-2026).
      - name: company_code
        in: body
        type: string
        description: The company code for the entity.
      steps:
      - name: get-adp-tax-totals
        type: call
        call: adp.get-tax-summary
        with:
          quarter: '{{quarter}}'
          company_code: '{{company_code}}'
      - name: get-gl-tax-entries
        type: call
        call: oracle.get-gl-balances
        with:
          period: '{{quarter}}'
          account_group: payroll_tax
      - name: write-recon-report
        type: call
        call: google-sheets.update-range
        with:
          spreadsheet_id: payroll_tax_recon_{{quarter}}
          range: Reconciliation!A1
          values: 'ADP Total: {{get-adp-tax-totals.totalTax}}, GL Total: {{get-gl-tax-entries.totalBalance}}, Variance: {{get-adp-tax-totals.totalTax}} - {{get-gl-tax-entries.totalBalance}}'
      - name: notify-finance
        type: call
        call: slack.post-message
        with:
          channel: '#finance-payroll'
          text: 'Quarterly tax reconciliation complete for {{quarter}} ({{company_code}}). ADP: {{get-adp-tax-totals.totalTax}}, GL: {{get-gl-tax-entries.totalBalance}}. Report: {{write-recon-report.spreadsheetUrl}}.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: tax-summaries
      path: /tax-summaries?quarter={{quarter}}&companyCode={{company_code}}
      inputParameters:
      - name: quarter
        in: query
      - name: company_code
        in: query
      operations:
      - name: get-tax-summary
        method: GET
  - type: http
    namespace: oracle
    baseUri: https://adp-erp.oraclecloud.com/fscmRestApi/resources/v1
    authentication:
      type: basic
      username: $secrets.oracle_user
      password: $secrets.oracle_password
    resources:
    - name: gl-balances
      path: /generalLedgerBalances?period={{period}}&accountGroup={{account_group}}
      inputParameters:
      - name: period
        in: query
      - name: account_group
        in: query
      operations:
      - name: get-gl-balances
        method: GET
  - type: http
    namespace: google-sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheet-values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-range
        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 → quarterly-payroll-tax-reconciliation-pipeline.yml

Extracts compensation data from ADP, compares against market data in Snowflake, generates reports in Power BI, and notifies compensation team.

naftiko: '0.5'
info:
  label: Salary Benchmarking Pipeline
  description: Extracts compensation data from ADP, compares against market data in Snowflake, generates reports in Power BI, and notifies compensation team.
  tags:
  - compensation
  - adp
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compensation
    port: 8080
    tools:
    - name: salary_benchmarking_pipeline
      description: Orchestrate salary benchmarking pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → salary-benchmarking-pipeline.yml

Retrieves a breakdown of all payroll deductions for an employee from ADP including pre-tax, post-tax, and voluntary deductions.

naftiko: '0.5'
info:
  label: Payroll Deduction Summary
  description: Retrieves a breakdown of all payroll deductions for an employee from ADP including pre-tax, post-tax, and voluntary deductions.
  tags:
  - payroll
  - deductions
  - adp
capability:
  exposes:
  - type: mcp
    namespace: payroll-deductions
    port: 8080
    tools:
    - name: get-deduction-summary
      description: Retrieve a deduction summary for an employee by ADP associate OID.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      call: adp.get-deductions
      with:
        associate_oid: '{{associate_oid}}'
      outputParameters:
      - name: pre_tax_total
        type: string
        mapping: $.deductions.preTaxTotal
      - name: post_tax_total
        type: string
        mapping: $.deductions.postTaxTotal
      - name: voluntary_total
        type: string
        mapping: $.deductions.voluntaryTotal
      - name: total_deductions
        type: string
        mapping: $.deductions.grandTotal
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: deductions
      path: /workers/{{associate_oid}}/deductions
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-deductions
        method: GET
Open in Framework → View in Fleet → payroll-deduction-summary.yml

Retrieves emergency contact information from ADP, validates completeness, and creates a ServiceNow task for HR to follow up if contacts are missing.

naftiko: '0.5'
info:
  label: Emergency Contact Verification Pipeline
  description: Retrieves emergency contact information from ADP, validates completeness, and creates a ServiceNow task for HR to follow up if contacts are missing.
  tags:
  - hr
  - safety
  - adp
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-safety
    port: 8080
    tools:
    - name: get-emergency-contacts
      description: Retrieve and verify emergency contacts, creating a follow-up task if incomplete.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      steps:
      - name: fetch-contacts
        type: call
        call: adp.get-emergency-contacts
        with:
          associate_oid: '{{associate_oid}}'
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: create-followup
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Emergency contact verification: {{get-employee.legalName.formattedName}}'
          category: hr_safety
          assigned_group: HR_Administration
          description: 'Emergency contacts for {{get-employee.legalName.formattedName}}: Primary={{fetch-contacts.primaryName}}, Phone={{fetch-contacts.primaryPhone}}. Please verify completeness.'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: emergency-contacts
      path: /workers/{{associate_oid}}/emergency-contacts
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-emergency-contacts
        method: GET
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.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 → emergency-contact-verification-pipeline.yml

Extracts compensation data from ADP for salary benchmarking, anonymizes it, and exports to an Amazon S3 bucket for third-party survey submission.

naftiko: '0.5'
info:
  label: Salary Survey Data Export
  description: Extracts compensation data from ADP for salary benchmarking, anonymizes it, and exports to an Amazon S3 bucket for third-party survey submission.
  tags:
  - compensation
  - analytics
  - adp
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: compensation-export
    port: 8080
    tools:
    - name: export-salary-survey
      description: Export anonymized salary data to S3 for benchmarking surveys.
      inputParameters:
      - name: survey_id
        in: body
        type: string
        description: The salary survey identifier.
      - name: department
        in: body
        type: string
        description: The department to include in the export.
      steps:
      - name: get-comp-data
        type: call
        call: adp.get-compensation-report
        with:
          department: '{{department}}'
          report_type: salary_survey
      - name: upload-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: adp-salary-surveys
          key: surveys/{{survey_id}}/{{department}}_export.csv
          body: '{{get-comp-data.anonymizedData}}'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: compensation-reports
      path: /reports/compensation?department={{department}}&reportType={{report_type}}
      inputParameters:
      - name: department
        in: query
      - name: report_type
        in: query
      operations:
      - name: get-compensation-report
        method: GET
  - type: http
    namespace: s3
    baseUri: https://adp-salary-surveys.s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
Open in Framework → View in Fleet → salary-survey-data-export.yml

Validates pre-payroll data in ADP, checks for exceptions in Snowflake, creates approval workflow in ServiceNow, and notifies payroll managers.

naftiko: '0.5'
info:
  label: Payroll Cycle Pre-Check Pipeline
  description: Validates pre-payroll data in ADP, checks for exceptions in Snowflake, creates approval workflow in ServiceNow, and notifies payroll managers.
  tags:
  - payroll
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: payroll_cycle_pre_check_pipeline
      description: Orchestrate payroll cycle pre-check pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → payroll-cycle-pre-check-pipeline.yml

When an employee is terminated in ADP, revokes Azure Active Directory access, closes their ServiceNow tickets, archives their Google Drive folder, and notifies the manager via Microsoft Teams.

naftiko: '0.5'
info:
  label: Termination Offboarding Orchestrator
  description: When an employee is terminated in ADP, revokes Azure Active Directory access, closes their ServiceNow tickets, archives their Google Drive folder, and notifies the manager via Microsoft Teams.
  tags:
  - hr
  - offboarding
  - adp
  - azure-active-directory
  - servicenow
  - google-drive
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Execute the full offboarding sequence for a terminated employee.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID for the terminated employee.
      - name: termination_date
        in: body
        type: string
        description: The termination effective date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: adp.get-worker
        with:
          associate_oid: '{{associate_oid}}'
      - name: disable-ad-account
        type: call
        call: azure-ad.disable-user
        with:
          user_principal_name: '{{get-employee.businessCommunication.emailUri}}'
      - name: close-tickets
        type: call
        call: servicenow.close-user-tickets
        with:
          caller_id: '{{get-employee.businessCommunication.emailUri}}'
          close_notes: Employee terminated on {{termination_date}}. Tickets auto-closed.
      - name: archive-drive
        type: call
        call: google-drive.move-folder
        with:
          folder_id: '{{get-employee.driveFolder}}'
          destination: archived_employees
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.reportsTo.emailUri}}'
          text: Offboarding complete for {{get-employee.legalName.formattedName}} effective {{termination_date}}. AD disabled, tickets closed, drive archived.
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: workers
      path: /workers/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: users
      path: /users/{{user_principal_name}}
      inputParameters:
      - name: user_principal_name
        in: path
      operations:
      - name: disable-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.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}}
      inputParameters:
      - name: caller_id
        in: query
      operations:
      - name: close-user-tickets
        method: PATCH
  - 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/{{folder_id}}
      inputParameters:
      - name: folder_id
        in: path
      operations:
      - name: move-folder
        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 → termination-offboarding-orchestrator.yml

Updates an employee address in ADP, triggers a tax jurisdiction review in ServiceNow, and syncs the new address to Salesforce contact records.

naftiko: '0.5'
info:
  label: Employee Address Change Pipeline
  description: Updates an employee address in ADP, triggers a tax jurisdiction review in ServiceNow, and syncs the new address to Salesforce contact records.
  tags:
  - hr
  - demographics
  - adp
  - servicenow
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: hr-demographics
    port: 8080
    tools:
    - name: update-employee-address
      description: Update an employee address in ADP, trigger tax review, and sync to Salesforce.
      inputParameters:
      - name: associate_oid
        in: body
        type: string
        description: The ADP associate OID.
      - name: street_address
        in: body
        type: string
        description: The new street address.
      - name: city
        in: body
        type: string
        description: The new city.
      - name: state
        in: body
        type: string
        description: The new state code.
      - name: postal_code
        in: body
        type: string
        description: The new postal code.
      steps:
      - name: update-adp-address
        type: call
        call: adp.update-address
        with:
          associate_oid: '{{associate_oid}}'
          street_address: '{{street_address}}'
          city: '{{city}}'
          state: '{{state}}'
          postal_code: '{{postal_code}}'
      - name: trigger-tax-review
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Tax jurisdiction review: {{associate_oid}} moved to {{state}}'
          category: tax_compliance
          assigned_group: Payroll_Tax
          description: Employee {{associate_oid}} changed address to {{city}}, {{state}} {{postal_code}}. Review state tax withholding.
      - name: sync-salesforce
        type: call
        call: salesforce.update-contact
        with:
          associate_oid: '{{associate_oid}}'
          mailing_street: '{{street_address}}'
          mailing_city: '{{city}}'
          mailing_state: '{{state}}'
          mailing_postal_code: '{{postal_code}}'
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: worker-addresses
      path: /workers/{{associate_oid}}/person/legalAddress
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: update-address
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://adp-corp.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://adp.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/{{associate_oid}}
      inputParameters:
      - name: associate_oid
        in: path
      operations:
      - name: update-contact
        method: PATCH
Open in Framework → View in Fleet → employee-address-change-pipeline.yml

Retrieves GitHub repository metadata for ADP.

naftiko: '0.5'
info:
  label: GitHub Repository Lookup
  description: Retrieves GitHub repository metadata for ADP.
  tags:
  - devops
  - github
  - source-control
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-repo
      description: Look up repo at ADP.
      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

Retrieves company and organizational unit details by company code from ADP.

naftiko: '0.5'
info:
  label: ADP Company Code Lookup
  description: Retrieves company and organizational unit details by company code from ADP.
  tags:
  - hr
  - organization
  - adp
capability:
  exposes:
  - type: mcp
    namespace: org-lookup
    port: 8080
    tools:
    - name: get-company-info
      description: Look up company or organizational unit details by ADP company code.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: The ADP company code.
      call: adp.get-company
      with:
        company_code: '{{company_code}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.company.legalName
      - name: ein
        type: string
        mapping: $.company.federalEmployerIdNumber
      - name: state_of_incorporation
        type: string
        mapping: $.company.stateOfIncorporation
  consumes:
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/core/v1
    authentication:
      type: bearer
      token: $secrets.adp_bearer_token
    resources:
    - name: companies
      path: /organizations/{{company_code}}
      inputParameters:
      - name: company_code
        in: path
      operations:
      - name: get-company
        method: GET
Open in Framework → View in Fleet → adp-company-code-lookup.yml

Extracts data from legacy system, validates in Snowflake, loads into ADP, runs parallel test, and notifies implementation team.

naftiko: '0.5'
info:
  label: Client Payroll Migration Orchestrator
  description: Extracts data from legacy system, validates in Snowflake, loads into ADP, runs parallel test, and notifies implementation team.
  tags:
  - migration
  - adp
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: migration
    port: 8080
    tools:
    - name: client_payroll_migration_orchestrator
      description: Orchestrate client payroll migration orchestrator workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-adp
        type: call
        call: adp.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: adp
    baseUri: https://api.adp.com/hr/v2
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: adp-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://adp.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://adp.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 → client-payroll-migration-orchestrator.yml

Submits text to the Perspective API for toxicity scoring, checks against threshold, flags the content in a Firestore collection, and notifies moderators via Gmail.

naftiko: '0.5'
info:
  label: Content Moderation Pipeline
  description: Submits text to the Perspective API for toxicity scoring, checks against threshold, flags the content in a Firestore collection, and notifies moderators via Gmail.
  tags:
  - ai
  - content-moderation
  - perspective-api
  - firebase
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: content-moderation
    port: 8080
    tools:
    - name: moderate-content
      description: Score text for toxicity, flag if above threshold, store in Firestore, and email moderators.
      inputParameters:
      - name: content_text
        in: body
        type: string
        description: The text content to moderate.
      - name: content_id
        in: body
        type: string
        description: A unique identifier for the content.
      - name: toxicity_threshold
        in: body
        type: number
        description: Toxicity score threshold (0.0-1.0).
      - name: moderator_email
        in: body
        type: string
        description: Email address of the content moderator.
      - name: project_id
        in: body
        type: string
        description: The Firebase project ID.
      steps:
      - name: score-toxicity
        type: call
        call: perspective.analyze-comment
        with:
          text: '{{content_text}}'
      - name: flag-content
        type: call
        call: firestore.create-document
        with:
          project_id: '{{project_id}}'
          collection: flagged_content
          document_id: '{{content_id}}'
          fields: '{"text": "{{content_text}}", "toxicity": "{{score-toxicity.attributeScores.TOXICITY.summaryScore.value}}"}'
      - name: notify-moderator
        type: call
        call: gmail.send-message
        with:
          to: '{{moderator_email}}'
          subject: 'Content flagged: {{content_id}}'
          body: Content ID {{content_id}} scored {{score-toxicity.attributeScores.TOXICITY.summaryScore.value}} toxicity. Review at dashboard.
  consumes:
  - type: http
    namespace: perspective
    baseUri: https://commentanalyzer.googleapis.com/v1alpha1
    authentication:
      type: apiKey
      key: $secrets.perspective_api_key
      in: query
      name: key
    resources:
    - name: comments
      path: /comments:analyze
      operations:
      - name: analyze-comment
        method: POST
  - type: http
    namespace: firestore
    baseUri: https://firestore.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.firebase_token
    resources:
    - name: documents
      path: /projects/{{project_id}}/databases/(default)/documents/{{collection}}/{{document_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: collection
        in: path
      - name: document_id
        in: path
      operations:
      - name: create-document
        method: PATCH
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → content-moderation-pipeline.yml

Initiates failover to secondary region, validates services, runs health checks, and reports results.

naftiko: '0.5'
info:
  label: Multi-Region Failover Test Pipeline
  description: Initiates failover to secondary region, validates services, runs health checks, and reports results.
  tags:
  - disaster-recovery
  - kubernetes
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: disaster-recovery
    port: 8080
    tools:
    - name: multi_region_failover_test_pipeline
      description: Orchestrate multi-region failover test pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-k8s
        type: call
        call: k8s.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-datadog
        type: call
        call: datadog.process-resource
        with:
          data: '{{get-k8s.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Multi-Region Failover Test Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: k8s
    baseUri: https://alphabet-k8s.com/api/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: kubernetes-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 → multi-region-failover-test-pipeline.yml

Retrieves user account details from the directory. Used by Alphabet teams.

naftiko: '0.5'
info:
  label: Alphabet User Account Lookup
  description: Retrieves user account details from the directory. Used by Alphabet teams.
  tags:
  - cloud
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: salesforce
    port: 8080
    tools:
    - name: get-user_account_lookup
      description: Retrieves user account details from the directory. Used by Alphabet teams.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The user_id to look up.
      call: salesforce.get-user_id
      with:
        user_id: '{{user_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://alphabet.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: alphabet_user_account_lookup
        method: GET
Open in Framework → View in Fleet → alphabet-user-account-lookup.yml

Profiles API latency, identifies bottlenecks, applies caching rules, and reports improvements.

naftiko: '0.5'
info:
  label: API Performance Optimization Pipeline
  description: Profiles API latency, identifies bottlenecks, applies caching rules, and reports improvements.
  tags:
  - performance
  - datadog
  - grafana
  - slack
capability:
  exposes:
  - type: mcp
    namespace: performance
    port: 8080
    tools:
    - name: api_performance_optimization_pipeline
      description: Orchestrate api performance optimization 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-grafana
        type: call
        call: grafana.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: API Performance Optimization Pipeline step 3 complete.
  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: grafana
    baseUri: https://alphabet-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-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 → api-performance-optimization-pipeline.yml

Triggers a Vertex AI custom training job, waits for completion, uploads the trained model to the Model Registry, and deploys it to an existing endpoint with traffic split.

naftiko: '0.5'
info:
  label: ML Model Training to Deployment Pipeline
  description: Triggers a Vertex AI custom training job, waits for completion, uploads the trained model to the Model Registry, and deploys it to an existing endpoint with traffic split.
  tags:
  - ai
  - machine-learning
  - vertex-ai
  - mlops
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: vertex-mlops
    port: 8080
    tools:
    - name: train-and-deploy-model
      description: 'Run end-to-end ML workflow: launch training, register model, deploy to endpoint.'
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Vertex AI region.
      - name: training_pipeline_id
        in: body
        type: string
        description: The training pipeline configuration ID.
      - name: endpoint_id
        in: body
        type: string
        description: The target endpoint for deployment.
      - name: traffic_percentage
        in: body
        type: number
        description: Traffic percentage to route to the new model (0-100).
      steps:
      - name: launch-training
        type: call
        call: vertexai.create-training-pipeline
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          pipeline_id: '{{training_pipeline_id}}'
      - name: get-training-status
        type: call
        call: vertexai.get-training-pipeline
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          pipeline_name: '{{launch-training.name}}'
      - name: upload-model
        type: call
        call: vertexai.upload-model
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          artifact_uri: '{{get-training-status.modelToUpload.artifactUri}}'
      - name: deploy-model
        type: call
        call: vertexai.deploy-model
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          endpoint_id: '{{endpoint_id}}'
          model_id: '{{upload-model.model}}'
          traffic_percentage: '{{traffic_percentage}}'
  consumes:
  - type: http
    namespace: vertexai
    baseUri: https://us-central1-aiplatform.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: training-pipelines
      path: /projects/{{project_id}}/locations/{{region}}/trainingPipelines
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      operations:
      - name: create-training-pipeline
        method: POST
      - name: get-training-pipeline
        method: GET
    - name: models
      path: /projects/{{project_id}}/locations/{{region}}/models:upload
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      operations:
      - name: upload-model
        method: POST
    - name: endpoint-deployments
      path: /projects/{{project_id}}/locations/{{region}}/endpoints/{{endpoint_id}}:deployModel
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: endpoint_id
        in: path
      operations:
      - name: deploy-model
        method: POST
Open in Framework → View in Fleet → ml-model-training-to-deployment-pipeline.yml

Queries time-series metrics from Google Cloud Monitoring for a specified resource.

naftiko: '0.5'
info:
  label: Cloud Monitoring Metric Query
  description: Queries time-series metrics from Google Cloud Monitoring for a specified resource.
  tags:
  - monitoring
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: cloudmonitoring
    port: 8080
    tools:
    - name: list-timeseries
      description: Query time-series metrics from Cloud Monitoring.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: filter
        in: body
        type: string
        description: The monitoring filter expression.
      call: cloudmonitoring.list-timeseries
      with:
        project_id: '{{project_id}}'
        filter: '{{filter}}'
  consumes:
  - type: http
    namespace: cloudmonitoring
    baseUri: https://monitoring.googleapis.com/v3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: timeseries
      path: /projects/{{project_id}}/timeSeries
      inputParameters:
      - name: project_id
        in: path
      - name: filter
        in: query
      operations:
      - name: list-timeseries
        method: GET
Open in Framework → View in Fleet → cloud-monitoring-metric-query.yml

Lists container images stored in a Google Artifact Registry repository.

naftiko: '0.5'
info:
  label: Artifact Registry Image List
  description: Lists container images stored in a Google Artifact Registry repository.
  tags:
  - containers
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: artifactregistry
    port: 8080
    tools:
    - name: list-images
      description: List Docker images in an Artifact Registry repository.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Artifact Registry region.
      - name: repo_name
        in: body
        type: string
        description: The repository name.
      call: artifactregistry.list-images
      with:
        project_id: '{{project_id}}'
        region: '{{region}}'
        repo_name: '{{repo_name}}'
  consumes:
  - type: http
    namespace: artifactregistry
    baseUri: https://artifactregistry.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: images
      path: /projects/{{project_id}}/locations/{{region}}/repositories/{{repo_name}}/dockerImages
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: repo_name
        in: path
      operations:
      - name: list-images
        method: GET
Open in Framework → View in Fleet → artifact-registry-image-list.yml

Retrieves the latest deployed revision of an Apigee API proxy including deployment status and environment. Used by API platform teams for governance.

naftiko: '0.5'
info:
  label: Apigee API Proxy Revision
  description: Retrieves the latest deployed revision of an Apigee API proxy including deployment status and environment. Used by API platform teams for governance.
  tags:
  - api-management
  - apigee
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: apigee-governance
    port: 8080
    tools:
    - name: get-proxy-deployment
      description: Look up Apigee proxy deployment details by org, proxy name, and environment.
      inputParameters:
      - name: org_name
        in: body
        type: string
        description: The Apigee organization name.
      - name: api_proxy
        in: body
        type: string
        description: The API proxy name.
      - name: environment
        in: body
        type: string
        description: The deployment environment (e.g. prod, test).
      call: apigee.get-deployment
      with:
        org_name: '{{org_name}}'
        api_proxy: '{{api_proxy}}'
        environment: '{{environment}}'
      outputParameters:
      - name: revision
        type: string
        mapping: $.deployments[0].revision
      - name: deploy_state
        type: string
        mapping: $.deployments[0].state
  consumes:
  - type: http
    namespace: apigee
    baseUri: https://apigee.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: deployments
      path: /organizations/{{org_name}}/environments/{{environment}}/apis/{{api_proxy}}/deployments
      inputParameters:
      - name: org_name
        in: path
      - name: environment
        in: path
      - name: api_proxy
        in: path
      operations:
      - name: get-deployment
        method: GET
Open in Framework → View in Fleet → apigee-api-proxy-revision.yml

Retrieves a Google Pay transaction, cross-references with Salesforce order data, logs the reconciliation to BigQuery, and alerts finance via Gmail on discrepancies.

naftiko: '0.5'
info:
  label: Payment Reconciliation Pipeline
  description: Retrieves a Google Pay transaction, cross-references with Salesforce order data, logs the reconciliation to BigQuery, and alerts finance via Gmail on discrepancies.
  tags:
  - payments
  - google-pay
  - finance
  - salesforce
  - bigquery
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: payment-reconciliation
    port: 8080
    tools:
    - name: reconcile-payment
      description: Reconcile Google Pay transaction with Salesforce order, log to BigQuery, alert on mismatch.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Google Pay order identifier.
      - name: sfdc_order_id
        in: body
        type: string
        description: The corresponding Salesforce order ID.
      - name: project_id
        in: body
        type: string
        description: GCP project for BigQuery logging.
      - name: finance_email
        in: body
        type: string
        description: Finance team email for discrepancy alerts.
      steps:
      - name: get-gpay-transaction
        type: call
        call: googlepay.get-order
        with:
          order_id: '{{order_id}}'
      - name: get-sfdc-order
        type: call
        call: salesforce.get-order
        with:
          order_id: '{{sfdc_order_id}}'
      - name: log-reconciliation
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: finance_ops
          table_id: payment_reconciliation
          rows: '[{"gpay_order": "{{order_id}}", "gpay_amount": "{{get-gpay-transaction.totalPrice}}", "sfdc_amount": "{{get-sfdc-order.TotalAmount}}"}]'
      - name: alert-discrepancy
        type: call
        call: gmail.send-message
        with:
          to: '{{finance_email}}'
          subject: 'Payment Reconciliation: {{order_id}}'
          body: 'GPay amount: {{get-gpay-transaction.totalPrice}} {{get-gpay-transaction.currencyCode}}. SFDC amount: {{get-sfdc-order.TotalAmount}}. Status: {{get-gpay-transaction.orderStatus}}.'
  consumes:
  - type: http
    namespace: googlepay
    baseUri: https://payments.googleapis.com/pay/v1
    authentication:
      type: bearer
      token: $secrets.google_pay_token
    resources:
    - name: orders
      path: /orders/{{order_id}}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://alphabet.my.salesforce.com/services/data/v59.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
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → payment-reconciliation-pipeline.yml

Scans Cloud Storage buckets for lifecycle policy compliance, logs violations to BigQuery, and alerts the security team in Slack.

naftiko: '0.5'
info:
  label: Cloud Storage Lifecycle Audit Pipeline
  description: Scans Cloud Storage buckets for lifecycle policy compliance, logs violations to BigQuery, and alerts the security team in Slack.
  tags:
  - security
  - compliance
  - gcp-cloud-storage
  - bigquery
capability:
  exposes:
  - type: mcp
    namespace: storage-audit
    port: 8080
    tools:
    - name: run-lifecycle-audit
      description: Audit Cloud Storage bucket lifecycle policies and report violations.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: bucket_name
        in: body
        type: string
        description: The bucket to audit.
      - name: dataset
        in: body
        type: string
        description: BigQuery dataset for violations.
      - name: table
        in: body
        type: string
        description: BigQuery table for violations.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for alerts.
      steps:
      - name: get-bucket-config
        type: call
        call: cloudstorage.get-bucket
        with:
          bucket_name: '{{bucket_name}}'
      - name: log-violation
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset: '{{dataset}}'
          table: '{{table}}'
          rows: '{{get-bucket-config.lifecycle}}'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Lifecycle audit for {{bucket_name}}: {{get-bucket-config.lifecycle.rule}}'
  consumes:
  - type: http
    namespace: cloudstorage
    baseUri: https://storage.googleapis.com/storage/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: buckets
      path: /b/{{bucket_name}}
      inputParameters:
      - name: bucket_name
        in: path
      operations:
      - name: get-bucket
        method: GET
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset}}/tables/{{table}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset
        in: path
      - name: table
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloud-storage-lifecycle-audit-pipeline.yml

Deploys a new Cloud Run revision, splits traffic between old and new versions, monitors error rates, and rolls back if thresholds are exceeded.

naftiko: '0.5'
info:
  label: Cloud Run Blue-Green Deployment Pipeline
  description: Deploys a new Cloud Run revision, splits traffic between old and new versions, monitors error rates, and rolls back if thresholds are exceeded.
  tags:
  - containers
  - google-cloud-platform
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: cloudrun-bg
    port: 8080
    tools:
    - name: run-blue-green-deploy
      description: Execute a blue-green deployment on Cloud Run with traffic splitting and monitoring.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Cloud Run region.
      - name: service_name
        in: body
        type: string
        description: The Cloud Run service.
      - name: new_image
        in: body
        type: string
        description: Container image URI for new revision.
      - name: traffic_split
        in: body
        type: number
        description: Percentage of traffic for new revision.
      steps:
      - name: deploy-revision
        type: call
        call: cloudrun.update-service
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          service_name: '{{service_name}}'
          image: '{{new_image}}'
      - name: split-traffic
        type: call
        call: cloudrun.update-service
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          service_name: '{{service_name}}'
          trafficSplit: '{{traffic_split}}'
      - name: check-errors
        type: call
        call: cloudmonitoring.list-timeseries
        with:
          project_id: '{{project_id}}'
          filter: resource.type=cloud_run_revision AND metric.type=run.googleapis.com/request_count
      - name: finalize
        type: call
        call: cloudrun.update-service
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          service_name: '{{service_name}}'
          trafficSplit: '100'
  consumes:
  - type: http
    namespace: cloudrun
    baseUri: https://run.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: services
      path: /projects/{{project_id}}/locations/{{region}}/services/{{service_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: service_name
        in: path
      operations:
      - name: get-service
        method: GET
      - name: update-service
        method: PATCH
  - type: http
    namespace: cloudmonitoring
    baseUri: https://monitoring.googleapis.com/v3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: timeseries
      path: /projects/{{project_id}}/timeSeries
      inputParameters:
      - name: project_id
        in: path
      - name: filter
        in: query
      operations:
      - name: list-timeseries
        method: GET
Open in Framework → View in Fleet → cloud-run-blue-green-deployment-pipeline.yml

Retrieves the latest published container version from Google Tag Manager including tag count, trigger count, and publish timestamp.

naftiko: '0.5'
info:
  label: Google Tag Manager Container Version
  description: Retrieves the latest published container version from Google Tag Manager including tag count, trigger count, and publish timestamp.
  tags:
  - marketing
  - analytics
  - google-tag-manager
capability:
  exposes:
  - type: mcp
    namespace: gtm-governance
    port: 8080
    tools:
    - name: get-container-version
      description: Look up the latest GTM container version by account and container ID.
      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.
      call: gtm.get-latest-version
      with:
        account_id: '{{account_id}}'
        container_id: '{{container_id}}'
      outputParameters:
      - name: version_id
        type: string
        mapping: $.containerVersionId
      - name: tag_count
        type: number
        mapping: $.tag.length
      - name: trigger_count
        type: number
        mapping: $.trigger.length
  consumes:
  - type: http
    namespace: gtm
    baseUri: https://tagmanager.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: versions
      path: /accounts/{{account_id}}/containers/{{container_id}}/versions/latest
      inputParameters:
      - name: account_id
        in: path
      - name: container_id
        in: path
      operations:
      - name: get-latest-version
        method: GET
Open in Framework → View in Fleet → google-tag-manager-container-version.yml

Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.

naftiko: '0.5'
info:
  label: Employee Onboarding Automation Pipeline
  description: Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.
  tags:
  - hr
  - workday
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: employee_onboarding_automation
      description: Orchestrate employee onboarding automation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-gcp
        type: call
        call: gcp.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-gcp.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Employee Onboarding Automation Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: gcp
    baseUri: https://compute.googleapis.com/compute/v1/projects/alphabet
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: gcp-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://alphabet.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 → employee-onboarding-automation-pipeline.yml

Validates change requests, routes for approval, schedules implementation, and notifies stakeholders.

naftiko: '0.5'
info:
  label: Change Management Approval Pipeline
  description: Validates change requests, routes for approval, schedules implementation, and notifies stakeholders.
  tags:
  - itsm
  - servicenow
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: change_management_approval_pipeline
      description: Orchestrate change management approval pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Change Management Approval Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://alphabet.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://alphabet.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 → change-management-approval-pipeline.yml

Retrieves analytics data for a YouTube channel including views, subscribers, and engagement metrics.

naftiko: '0.5'
info:
  label: YouTube Channel Analytics
  description: Retrieves analytics data for a YouTube channel including views, subscribers, and engagement metrics.
  tags:
  - analytics
  - youtube
capability:
  exposes:
  - type: mcp
    namespace: youtubeanalytics
    port: 8080
    tools:
    - name: query-report
      description: Query YouTube Analytics reports for channel metrics.
      inputParameters:
      - name: ids
        in: body
        type: string
        description: The channel identifier.
      - name: start_date
        in: body
        type: string
        description: The report start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: The report end date in YYYY-MM-DD format.
      - name: metrics
        in: body
        type: string
        description: Comma-separated list of metrics.
      call: youtubeanalytics.query-report
      with:
        ids: '{{ids}}'
        startDate: '{{start_date}}'
        endDate: '{{end_date}}'
        metrics: '{{metrics}}'
  consumes:
  - type: http
    namespace: youtubeanalytics
    baseUri: https://youtubeanalytics.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.youtube_token
    resources:
    - name: reports
      path: /reports
      inputParameters:
      - name: ids
        in: query
      - name: startDate
        in: query
      - name: endDate
        in: query
      - name: metrics
        in: query
      operations:
      - name: query-report
        method: GET
Open in Framework → View in Fleet → youtube-channel-analytics.yml

On a GitHub pull request merge, triggers a Cloud Build, deploys the built image to GKE, runs Prometheus health checks, and updates the GitHub commit status.

naftiko: '0.5'
info:
  label: GitHub PR to Cloud Build to GKE Pipeline
  description: On a GitHub pull request merge, triggers a Cloud Build, deploys the built image to GKE, runs Prometheus health checks, and updates the GitHub commit status.
  tags:
  - devops
  - ci-cd
  - github
  - cloud-build
  - gke
  - prometheus
capability:
  exposes:
  - type: mcp
    namespace: github-deploy-pipeline
    port: 8080
    tools:
    - name: deploy-on-merge
      description: Build via Cloud Build, deploy to GKE, verify with Prometheus, update GitHub status.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: github_repo
        in: body
        type: string
        description: The GitHub repository (owner/repo).
      - name: commit_sha
        in: body
        type: string
        description: The merged commit SHA.
      - name: image_name
        in: body
        type: string
        description: The container image name.
      - name: cluster_name
        in: body
        type: string
        description: The GKE cluster name.
      - name: zone
        in: body
        type: string
        description: The GKE cluster zone.
      - name: deployment_name
        in: body
        type: string
        description: The Kubernetes deployment name.
      - name: prometheus_endpoint
        in: body
        type: string
        description: The Prometheus query endpoint URL.
      steps:
      - name: trigger-build
        type: call
        call: cloudbuild.create-build
        with:
          project_id: '{{project_id}}'
          commit_sha: '{{commit_sha}}'
          image_name: '{{image_name}}'
      - name: deploy-to-gke
        type: call
        call: gke.update-deployment-image
        with:
          project_id: '{{project_id}}'
          zone: '{{zone}}'
          cluster_name: '{{cluster_name}}'
          deployment_name: '{{deployment_name}}'
          image: '{{trigger-build.results.images[0].name}}'
      - name: health-check
        type: call
        call: prometheus.query
        with:
          endpoint: '{{prometheus_endpoint}}'
          query: up{job="{{deployment_name}}"}
      - name: update-github-status
        type: call
        call: github.create-commit-status
        with:
          repo: '{{github_repo}}'
          sha: '{{commit_sha}}'
          state: success
          description: 'Deployed to {{cluster_name}}. Health: {{health_check.data.result[0].value[1]}}'
  consumes:
  - type: http
    namespace: cloudbuild
    baseUri: https://cloudbuild.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: builds
      path: /projects/{{project_id}}/builds
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: create-build
        method: POST
  - type: http
    namespace: gke
    baseUri: https://container.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: deployments
      path: /projects/{{project_id}}/zones/{{zone}}/clusters/{{cluster_name}}/deployments/{{deployment_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: zone
        in: path
      - name: cluster_name
        in: path
      - name: deployment_name
        in: path
      operations:
      - name: update-deployment-image
        method: PATCH
  - type: http
    namespace: prometheus
    baseUri: '{{prometheus_endpoint}}'
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: query
      path: /api/v1/query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: statuses
      path: /repos/{{repo}}/statuses/{{sha}}
      inputParameters:
      - name: repo
        in: path
      - name: sha
        in: path
      operations:
      - name: create-commit-status
        method: POST
Open in Framework → View in Fleet → github-pr-to-cloud-build-to-gke-pipeline.yml

Audits Google Workspace license usage, identifies inactive users, generates a report in Google Sheets, and sends a summary to the IT admin.

naftiko: '0.5'
info:
  label: Google Workspace License Optimization Pipeline
  description: Audits Google Workspace license usage, identifies inactive users, generates a report in Google Sheets, and sends a summary to the IT admin.
  tags:
  - management
  - google-workspace
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: ws-license-opt
    port: 8080
    tools:
    - name: run-license-optimization
      description: Audit Workspace license usage and generate an optimization report.
      inputParameters:
      - name: domain
        in: body
        type: string
        description: The Google Workspace domain.
      - name: product_id
        in: body
        type: string
        description: The licensing product ID.
      - name: sku_id
        in: body
        type: string
        description: The SKU ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: Google Sheets spreadsheet ID.
      - name: range
        in: body
        type: string
        description: Cell range to append data.
      steps:
      - name: list-users
        type: call
        call: admindir.list-users
        with:
          domain: '{{domain}}'
          maxResults: '500'
      - name: list-licenses
        type: call
        call: licensing.list-assignments
        with:
          product_id: '{{product_id}}'
          sku_id: '{{sku_id}}'
      - name: write-report
        type: call
        call: googlesheets.append-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: '{{range}}'
          values: '{{list-licenses.items}}'
      - name: notify-admin
        type: call
        call: admindir.list-users
        with:
          domain: '{{domain}}'
          maxResults: '1'
  consumes:
  - type: http
    namespace: admindir
    baseUri: https://admin.googleapis.com/admin/directory/v1
    authentication:
      type: bearer
      token: $secrets.google_admin_token
    resources:
    - name: users
      path: /users
      inputParameters:
      - name: domain
        in: query
      - name: maxResults
        in: query
      operations:
      - name: list-users
        method: GET
  - type: http
    namespace: licensing
    baseUri: https://licensing.googleapis.com/apps/licensing/v1
    authentication:
      type: bearer
      token: $secrets.google_admin_token
    resources:
    - name: licenseAssignments
      path: /product/{{product_id}}/sku/{{sku_id}}/users
      inputParameters:
      - name: product_id
        in: path
      - name: sku_id
        in: path
      operations:
      - name: list-assignments
        method: GET
  - type: http
    namespace: googlesheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-values
        method: POST
Open in Framework → View in Fleet → google-workspace-license-optimization-pipeline.yml

Retrieves the status and configuration of a Cloud Build trigger.

naftiko: '0.5'
info:
  label: Cloud Build Trigger Status
  description: Retrieves the status and configuration of a Cloud Build trigger.
  tags:
  - ci
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: cloudbuild
    port: 8080
    tools:
    - name: get-trigger
      description: Get the configuration and status of a Cloud Build trigger.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Cloud Build region.
      - name: trigger_id
        in: body
        type: string
        description: The build trigger ID.
      call: cloudbuild.get-trigger
      with:
        project_id: '{{project_id}}'
        region: '{{region}}'
        trigger_id: '{{trigger_id}}'
  consumes:
  - type: http
    namespace: cloudbuild
    baseUri: https://cloudbuild.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: triggers
      path: /projects/{{project_id}}/locations/{{region}}/triggers/{{trigger_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: trigger_id
        in: path
      operations:
      - name: get-trigger
        method: GET
Open in Framework → View in Fleet → cloud-build-trigger-status.yml

Exports data from Snowflake to a staging GCS bucket, loads it into BigQuery via a load job, and sends a migration report to Google Chat.

naftiko: '0.5'
info:
  label: Snowflake to BigQuery Data Migration
  description: Exports data from Snowflake to a staging GCS bucket, loads it into BigQuery via a load job, and sends a migration report to Google Chat.
  tags:
  - data
  - migration
  - snowflake
  - bigquery
  - gcp-cloud-storage
capability:
  exposes:
  - type: mcp
    namespace: data-migration
    port: 8080
    tools:
    - name: migrate-snowflake-to-bq
      description: Export Snowflake data to GCS, load to BigQuery, and notify via Chat.
      inputParameters:
      - name: snowflake_query
        in: body
        type: string
        description: The Snowflake SQL query to export.
      - name: stage_bucket
        in: body
        type: string
        description: The GCS staging bucket.
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: bq_dataset
        in: body
        type: string
        description: The target BigQuery dataset.
      - name: bq_table
        in: body
        type: string
        description: The target BigQuery table.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for notifications.
      steps:
      - name: export-from-snowflake
        type: call
        call: snowflake.execute-query
        with:
          query: '{{snowflake_query}}'
          stage: '@gcs_stage/{{stage_bucket}}'
      - name: load-to-bq
        type: call
        call: bigquery.create-load-job
        with:
          project_id: '{{project_id}}'
          dataset_id: '{{bq_dataset}}'
          table_id: '{{bq_table}}'
          source_uri: gs://{{stage_bucket}}/export/*
      - name: notify-migration
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Migration complete. Data loaded from Snowflake to {{bq_dataset}}.{{bq_table}}. Job status: {{load-to-bq.status.state}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://alphabet.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: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: jobs
      path: /projects/{{project_id}}/jobs
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: create-load-job
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-to-bigquery-data-migration.yml

Queries Salesforce for new leads, transforms the data, loads into a BigQuery table, and triggers a Looker dashboard refresh.

naftiko: '0.5'
info:
  label: Salesforce to BigQuery Lead Sync
  description: Queries Salesforce for new leads, transforms the data, loads into a BigQuery table, and triggers a Looker dashboard refresh.
  tags:
  - crm
  - data
  - salesforce
  - bigquery
  - looker
capability:
  exposes:
  - type: mcp
    namespace: sfdc-bq-sync
    port: 8080
    tools:
    - name: sync-leads-to-bigquery
      description: Fetch Salesforce leads, load to BigQuery, and refresh Looker dashboard.
      inputParameters:
      - name: sfdc_query
        in: body
        type: string
        description: SOQL query to fetch leads from Salesforce.
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: bq_dataset
        in: body
        type: string
        description: The BigQuery dataset.
      - name: bq_table
        in: body
        type: string
        description: The BigQuery table.
      - name: looker_dashboard_id
        in: body
        type: string
        description: The Looker dashboard ID to refresh.
      steps:
      - name: query-salesforce
        type: call
        call: salesforce.query
        with:
          q: '{{sfdc_query}}'
      - name: load-to-bq
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: '{{bq_dataset}}'
          table_id: '{{bq_table}}'
          rows: '{{query-salesforce.records}}'
      - name: refresh-looker
        type: call
        call: looker.run-dashboard
        with:
          dashboard_id: '{{looker_dashboard_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://alphabet.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query
        method: GET
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: looker
    baseUri: https://alphabet.cloud.looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_api_token
    resources:
    - name: dashboards
      path: /dashboards/{{dashboard_id}}/run
      inputParameters:
      - name: dashboard_id
        in: path
      operations:
      - name: run-dashboard
        method: POST
Open in Framework → View in Fleet → salesforce-to-bigquery-lead-sync.yml

Publishes an event to a Pub/Sub topic, triggers a Cloud Function subscriber, logs the event to BigQuery, and confirms delivery via Google Chat.

naftiko: '0.5'
info:
  label: Event-Driven Notification Pipeline
  description: Publishes an event to a Pub/Sub topic, triggers a Cloud Function subscriber, logs the event to BigQuery, and confirms delivery via Google Chat.
  tags:
  - messaging
  - infrastructure
  - pubsub
  - cloud-functions
  - bigquery
capability:
  exposes:
  - type: mcp
    namespace: event-notifications
    port: 8080
    tools:
    - name: publish-and-track-event
      description: Publish to Pub/Sub, verify Cloud Function processing, log to BigQuery, and confirm via Chat.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: topic_id
        in: body
        type: string
        description: The Pub/Sub topic ID.
      - name: message_data
        in: body
        type: string
        description: The base64-encoded message data.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for delivery confirmations.
      steps:
      - name: publish-event
        type: call
        call: pubsub.publish
        with:
          project_id: '{{project_id}}'
          topic_id: '{{topic_id}}'
          message_data: '{{message_data}}'
      - name: log-event
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: event_logs
          table_id: pubsub_events
          rows: '[{"topic": "{{topic_id}}", "message_id": "{{publish-event.messageIds[0]}}"}]'
      - name: confirm-delivery
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Event published to {{topic_id}}. Message ID: {{publish-event.messageIds[0]}}. Logged to event_logs.pubsub_events.'
  consumes:
  - type: http
    namespace: pubsub
    baseUri: https://pubsub.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: topics
      path: /projects/{{project_id}}/topics/{{topic_id}}:publish
      inputParameters:
      - name: project_id
        in: path
      - name: topic_id
        in: path
      operations:
      - name: publish
        method: POST
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → event-driven-notification-pipeline.yml

Fetches group membership from Google Workspace Directory, compares with an HR source in Google Sheets, adds missing members, and logs changes to BigQuery.

naftiko: '0.5'
info:
  label: Workspace Group Membership Sync
  description: Fetches group membership from Google Workspace Directory, compares with an HR source in Google Sheets, adds missing members, and logs changes to BigQuery.
  tags:
  - identity
  - hr
  - google-workspace
  - google-sheets
  - bigquery
capability:
  exposes:
  - type: mcp
    namespace: workspace-sync
    port: 8080
    tools:
    - name: sync-group-membership
      description: Sync Workspace group members against HR source in Sheets, add missing, log to BigQuery.
      inputParameters:
      - name: group_email
        in: body
        type: string
        description: The Google Workspace group email.
      - name: spreadsheet_id
        in: body
        type: string
        description: The HR roster spreadsheet ID.
      - name: sheet_range
        in: body
        type: string
        description: The range containing employee emails.
      - name: project_id
        in: body
        type: string
        description: GCP project for audit logging.
      steps:
      - name: get-current-members
        type: call
        call: workspace.list-group-members
        with:
          group_email: '{{group_email}}'
      - name: get-hr-roster
        type: call
        call: sheets.get-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: '{{sheet_range}}'
      - name: add-missing-members
        type: call
        call: workspace.add-group-member
        with:
          group_email: '{{group_email}}'
          members: '{{get-hr-roster.values}}'
      - name: log-sync
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: identity_ops
          table_id: group_sync_log
          rows: '[{"group": "{{group_email}}", "action": "membership_sync", "source_count": "{{get-hr-roster.values.length}}"}]'
  consumes:
  - type: http
    namespace: workspace
    baseUri: https://admin.googleapis.com/admin/directory/v1
    authentication:
      type: bearer
      token: $secrets.workspace_admin_token
    resources:
    - name: group-members
      path: /groups/{{group_email}}/members
      inputParameters:
      - name: group_email
        in: path
      operations:
      - name: list-group-members
        method: GET
      - name: add-group-member
        method: POST
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_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: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → workspace-group-membership-sync.yml

Updates a Firebase Remote Config parameter for a feature flag, publishes a Pub/Sub event to notify downstream services, and posts the rollout status to Google Chat.

naftiko: '0.5'
info:
  label: Feature Flag Rollout Pipeline
  description: Updates a Firebase Remote Config parameter for a feature flag, publishes a Pub/Sub event to notify downstream services, and posts the rollout status to Google Chat.
  tags:
  - mobile
  - firebase
  - feature-flags
  - pubsub
capability:
  exposes:
  - type: mcp
    namespace: feature-rollout
    port: 8080
    tools:
    - name: rollout-feature-flag
      description: Update a Firebase Remote Config flag, publish event to Pub/Sub, and notify via Chat.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Firebase project ID.
      - name: parameter_key
        in: body
        type: string
        description: The Remote Config parameter key to update.
      - name: parameter_value
        in: body
        type: string
        description: The new value for the parameter.
      - name: topic_id
        in: body
        type: string
        description: Pub/Sub topic for feature flag events.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for rollout notifications.
      steps:
      - name: get-current-config
        type: call
        call: firebase.get-remote-config
        with:
          project_id: '{{project_id}}'
      - name: update-config
        type: call
        call: firebase.update-remote-config
        with:
          project_id: '{{project_id}}'
          parameter_key: '{{parameter_key}}'
          parameter_value: '{{parameter_value}}'
      - name: publish-event
        type: call
        call: pubsub.publish
        with:
          project_id: '{{project_id}}'
          topic_id: '{{topic_id}}'
          message_data: '{"flag": "{{parameter_key}}", "value": "{{parameter_value}}"}'
      - name: notify-team
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Feature flag {{parameter_key}} updated to {{parameter_value}}. Config version: {{update-config.version.versionNumber}}.'
  consumes:
  - type: http
    namespace: firebase
    baseUri: https://firebaseremoteconfig.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.firebase_token
    resources:
    - name: remote-config
      path: /projects/{{project_id}}/remoteConfig
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-remote-config
        method: GET
      - name: update-remote-config
        method: PUT
  - type: http
    namespace: pubsub
    baseUri: https://pubsub.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: topics
      path: /projects/{{project_id}}/topics/{{topic_id}}:publish
      inputParameters:
      - name: project_id
        in: path
      - name: topic_id
        in: path
      operations:
      - name: publish
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → feature-flag-rollout-pipeline.yml

Audits cloud resources for compliance tags, creates remediation tickets, and reports to leadership.

naftiko: '0.5'
info:
  label: Cloud Resource Tagging Audit
  description: Audits cloud resources for compliance tags, creates remediation tickets, and reports to leadership.
  tags:
  - compliance
  - gcp
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: cloud_resource_tagging_audit
      description: Orchestrate cloud resource tagging audit workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-gcp
        type: call
        call: gcp.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-gcp.result}}'
      - name: create-confluence
        type: call
        call: confluence.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Cloud Resource Tagging Audit step 3 complete.
  consumes:
  - type: http
    namespace: gcp
    baseUri: https://compute.googleapis.com/compute/v1/projects/alphabet
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: gcp-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://alphabet.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: confluence
    baseUri: https://alphabet.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-op
        method: POST
Open in Framework → View in Fleet → cloud-resource-tagging-audit.yml

Deploys a Cloud Function from a GCS archive, sets IAM invoker permissions, and verifies the function is active by calling its health endpoint.

naftiko: '0.5'
info:
  label: Cloud Function Deployment Pipeline
  description: Deploys a Cloud Function from a GCS archive, sets IAM invoker permissions, and verifies the function is active by calling its health endpoint.
  tags:
  - serverless
  - devops
  - cloud-functions
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: cloudfunc-deploy
    port: 8080
    tools:
    - name: deploy-cloud-function
      description: Deploy a Cloud Function, set IAM policy, and verify health.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The function region.
      - name: function_name
        in: body
        type: string
        description: The Cloud Function name.
      - name: source_archive_url
        in: body
        type: string
        description: GCS URI of the function source archive.
      - name: entry_point
        in: body
        type: string
        description: The function entry point.
      - name: runtime
        in: body
        type: string
        description: The runtime (e.g. python311, nodejs20).
      steps:
      - name: create-function
        type: call
        call: cloudfunctions.create-function
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          function_name: '{{function_name}}'
          source_archive_url: '{{source_archive_url}}'
          entry_point: '{{entry_point}}'
          runtime: '{{runtime}}'
      - name: set-iam-policy
        type: call
        call: cloudfunctions.set-iam-policy
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          function_name: '{{function_name}}'
          role: roles/cloudfunctions.invoker
          member: allUsers
      - name: verify-health
        type: call
        call: cloudfunctions.get-function
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          function_name: '{{function_name}}'
  consumes:
  - type: http
    namespace: cloudfunctions
    baseUri: https://cloudfunctions.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: functions
      path: /projects/{{project_id}}/locations/{{region}}/functions
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      operations:
      - name: create-function
        method: POST
    - name: function-detail
      path: /projects/{{project_id}}/locations/{{region}}/functions/{{function_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: function_name
        in: path
      operations:
      - name: get-function
        method: GET
      - name: set-iam-policy
        method: POST
Open in Framework → View in Fleet → cloud-function-deployment-pipeline.yml

Resolves a street address to geographic coordinates using the Google Maps Geocoding API. Returns latitude, longitude, and formatted address.

naftiko: '0.5'
info:
  label: Google Maps Geocoding
  description: Resolves a street address to geographic coordinates using the Google Maps Geocoding API. Returns latitude, longitude, and formatted address.
  tags:
  - maps
  - geocoding
  - google-maps
capability:
  exposes:
  - type: mcp
    namespace: maps-geocoding
    port: 8080
    tools:
    - name: geocode-address
      description: Convert a street address to lat/lng coordinates via Google Maps Geocoding.
      inputParameters:
      - name: address
        in: body
        type: string
        description: The street address to geocode.
      call: maps.geocode
      with:
        address: '{{address}}'
      outputParameters:
      - name: latitude
        type: number
        mapping: $.results[0].geometry.location.lat
      - name: longitude
        type: number
        mapping: $.results[0].geometry.location.lng
      - name: formatted_address
        type: string
        mapping: $.results[0].formatted_address
  consumes:
  - type: http
    namespace: maps
    baseUri: https://maps.googleapis.com/maps/api
    authentication:
      type: apiKey
      key: $secrets.google_maps_api_key
      in: query
      name: key
    resources:
    - name: geocode
      path: /geocode/json
      inputParameters:
      - name: address
        in: query
      operations:
      - name: geocode
        method: GET
Open in Framework → View in Fleet → google-maps-geocoding.yml

Runs a Google Analytics Data API report for page views and sessions by page path over a date range. Used for content performance analysis.

naftiko: '0.5'
info:
  label: Google Analytics Page Report
  description: Runs a Google Analytics Data API report for page views and sessions by page path over a date range. Used for content performance analysis.
  tags:
  - analytics
  - marketing
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: ga-reporting
    port: 8080
    tools:
    - name: get-page-report
      description: Run a GA4 report for page views and sessions grouped by page path.
      inputParameters:
      - name: property_id
        in: body
        type: string
        description: The GA4 property ID (numeric).
      - 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.
      call: ga4.run-report
      with:
        property_id: '{{property_id}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: ga4
    baseUri: https://analyticsdata.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-page-report.yml

Retrieves the status and configuration of a Cloud Spanner instance.

naftiko: '0.5'
info:
  label: Cloud Spanner Instance Status
  description: Retrieves the status and configuration of a Cloud Spanner instance.
  tags:
  - databases
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: spanner
    port: 8080
    tools:
    - name: get-instance
      description: Get the status and configuration details of a Cloud Spanner instance.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: instance_id
        in: body
        type: string
        description: The Spanner instance ID.
      call: spanner.get-instance
      with:
        project_id: '{{project_id}}'
        instance_id: '{{instance_id}}'
  consumes:
  - type: http
    namespace: spanner
    baseUri: https://spanner.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: instances
      path: /projects/{{project_id}}/instances/{{instance_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: instance_id
        in: path
      operations:
      - name: get-instance
        method: GET
Open in Framework → View in Fleet → cloud-spanner-instance-status.yml

Retrieves metadata for a BigQuery dataset including table count, last modified timestamp, and access controls. Used by data engineers to audit dataset health.

naftiko: '0.5'
info:
  label: BigQuery Dataset Discovery
  description: Retrieves metadata for a BigQuery dataset including table count, last modified timestamp, and access controls. Used by data engineers to audit dataset health.
  tags:
  - data
  - analytics
  - bigquery
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: bigquery-discovery
    port: 8080
    tools:
    - name: get-dataset-info
      description: Look up a BigQuery dataset by project and dataset ID. Returns table count, size, last modified date, and ACLs.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID containing the dataset.
      - name: dataset_id
        in: body
        type: string
        description: The BigQuery dataset identifier.
      call: bigquery.get-dataset
      with:
        project_id: '{{project_id}}'
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: table_count
        type: number
        mapping: $.tables.totalItems
      - name: last_modified
        type: string
        mapping: $.lastModifiedTime
      - name: location
        type: string
        mapping: $.location
  consumes:
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: datasets
      path: /projects/{{project_id}}/datasets/{{dataset_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      operations:
      - name: get-dataset
        method: GET
Open in Framework → View in Fleet → bigquery-dataset-discovery.yml

Scans cloud infrastructure for misconfigurations, prioritizes findings, and creates remediation tasks.

naftiko: '0.5'
info:
  label: Cloud Security Posture Assessment
  description: Scans cloud infrastructure for misconfigurations, prioritizes findings, and creates remediation tasks.
  tags:
  - security
  - gcp
  - jira
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: cloud_security_posture_assessment
      description: Orchestrate cloud security posture assessment workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-gcp
        type: call
        call: gcp.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-gcp.result}}'
      - name: create-servicenow
        type: call
        call: servicenow.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Cloud Security Posture Assessment step 3 complete.
  consumes:
  - type: http
    namespace: gcp
    baseUri: https://compute.googleapis.com/compute/v1/projects/alphabet
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: gcp-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://alphabet.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: servicenow
    baseUri: https://alphabet.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 → cloud-security-posture-assessment.yml

Runs a Looker dashboard query, exports the results to a BigQuery table, and posts a completion notification to Google Chat.

naftiko: '0.5'
info:
  label: Looker to BigQuery Scheduled Export
  description: Runs a Looker dashboard query, exports the results to a BigQuery table, and posts a completion notification to Google Chat.
  tags:
  - analytics
  - bi
  - looker
  - bigquery
capability:
  exposes:
  - type: mcp
    namespace: looker-export
    port: 8080
    tools:
    - name: export-looker-to-bq
      description: Run a Looker query, export results to BigQuery, and notify via Google Chat.
      inputParameters:
      - name: look_id
        in: body
        type: string
        description: The Looker look ID to execute.
      - name: project_id
        in: body
        type: string
        description: The GCP project ID for BigQuery.
      - name: bq_dataset
        in: body
        type: string
        description: The target BigQuery dataset.
      - name: bq_table
        in: body
        type: string
        description: The target BigQuery table.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for notifications.
      steps:
      - name: run-looker-query
        type: call
        call: looker.run-look
        with:
          look_id: '{{look_id}}'
          result_format: json
      - name: load-to-bq
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: '{{bq_dataset}}'
          table_id: '{{bq_table}}'
          rows: '{{run-looker-query}}'
      - name: notify-completion
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: Looker export complete. Look {{look_id}} data loaded to {{bq_dataset}}.{{bq_table}}.
  consumes:
  - type: http
    namespace: looker
    baseUri: https://alphabet.cloud.looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_api_token
    resources:
    - name: looks
      path: /looks/{{look_id}}/run/{{result_format}}
      inputParameters:
      - name: look_id
        in: path
      - name: result_format
        in: path
      operations:
      - name: run-look
        method: GET
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → looker-to-bigquery-scheduled-export.yml

Collects audit events, validates against policies, generates compliance reports, and notifies auditors.

naftiko: '0.5'
info:
  label: Compliance Audit Trail Pipeline
  description: Collects audit events, validates against policies, generates compliance reports, and notifies auditors.
  tags:
  - compliance
  - elasticsearch
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: compliance_audit_trail_pipeline
      description: Orchestrate compliance audit trail pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-elasticsearch
        type: call
        call: elasticsearch.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-elasticsearch.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Compliance Audit Trail Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://alphabet-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: elasticsearch-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://alphabet.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-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-audit-trail-pipeline.yml

Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.

naftiko: '0.5'
info:
  label: Software License Optimization Pipeline
  description: Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.
  tags:
  - operations
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: software_license_optimization
      description: Orchestrate software license optimization pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Software License Optimization Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://alphabet.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: snowflake
    baseUri: https://alphabet.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 → software-license-optimization-pipeline.yml

Sends a user utterance to a Dialogflow CX agent and returns the matched intent, confidence score, and fulfillment text. Used for chatbot testing.

naftiko: '0.5'
info:
  label: Dialogflow Intent Resolution
  description: Sends a user utterance to a Dialogflow CX agent and returns the matched intent, confidence score, and fulfillment text. Used for chatbot testing.
  tags:
  - ai
  - conversational-ai
  - google-dialogflow
capability:
  exposes:
  - type: mcp
    namespace: dialogflow-testing
    port: 8080
    tools:
    - name: detect-intent
      description: Send a text query to Dialogflow CX and return the matched intent and response.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: agent_id
        in: body
        type: string
        description: The Dialogflow CX agent ID.
      - name: session_id
        in: body
        type: string
        description: A unique session identifier.
      - name: query_text
        in: body
        type: string
        description: The user utterance to classify.
      call: dialogflow.detect-intent
      with:
        project_id: '{{project_id}}'
        agent_id: '{{agent_id}}'
        session_id: '{{session_id}}'
        query_text: '{{query_text}}'
      outputParameters:
      - name: matched_intent
        type: string
        mapping: $.queryResult.intent.displayName
      - name: confidence
        type: number
        mapping: $.queryResult.intentDetectionConfidence
      - name: fulfillment_text
        type: string
        mapping: $.queryResult.responseMessages[0].text.text[0]
  consumes:
  - type: http
    namespace: dialogflow
    baseUri: https://dialogflow.googleapis.com/v3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: sessions
      path: /projects/{{project_id}}/locations/global/agents/{{agent_id}}/sessions/{{session_id}}:detectIntent
      inputParameters:
      - name: project_id
        in: path
      - name: agent_id
        in: path
      - name: session_id
        in: path
      operations:
      - name: detect-intent
        method: POST
Open in Framework → View in Fleet → dialogflow-intent-resolution.yml

Generates a Campaign Manager 360 report, exports results to a Google Sheet, cross-references with Google Ads metrics, and emails a consolidated performance summary.

naftiko: '0.5'
info:
  label: Campaign Performance Review Pipeline
  description: Generates a Campaign Manager 360 report, exports results to a Google Sheet, cross-references with Google Ads metrics, and emails a consolidated performance summary.
  tags:
  - advertising
  - marketing
  - google-campaign-manager
  - google-sheets
  - google-ads
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: campaign-review
    port: 8080
    tools:
    - name: generate-performance-review
      description: Run CM360 report, export to Sheets, merge with Ads data, and email summary.
      inputParameters:
      - name: profile_id
        in: body
        type: string
        description: The Campaign Manager user profile ID.
      - name: advertiser_id
        in: body
        type: string
        description: The advertiser ID.
      - name: customer_id
        in: body
        type: string
        description: The Google Ads customer ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID for the report.
      - name: report_email
        in: body
        type: string
        description: Email for the performance summary.
      steps:
      - name: run-cm360-report
        type: call
        call: cm360.create-report
        with:
          profile_id: '{{profile_id}}'
          advertiser_id: '{{advertiser_id}}'
      - name: get-ads-metrics
        type: call
        call: googleads.query-campaign
        with:
          customer_id: '{{customer_id}}'
      - name: update-sheet
        type: call
        call: sheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: PerformanceReview!A1
          values: '{{run-cm360-report.rows}}'
      - name: email-summary
        type: call
        call: gmail.send-message
        with:
          to: '{{report_email}}'
          subject: Campaign Performance Review
          body: 'CM360 + Google Ads consolidated report ready. View: https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}.'
  consumes:
  - type: http
    namespace: cm360
    baseUri: https://dfareporting.googleapis.com/dfareporting/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: reports
      path: /userprofiles/{{profile_id}}/reports
      inputParameters:
      - name: profile_id
        in: path
      operations:
      - name: create-report
        method: POST
  - type: http
    namespace: googleads
    baseUri: https://googleads.googleapis.com/v16
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    inputParameters:
    - name: developer-token
      in: header
      value: $secrets.google_ads_developer_token
    resources:
    - name: campaigns
      path: /customers/{{customer_id}}/googleAds:searchStream
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: query-campaign
        method: POST
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → campaign-performance-review-pipeline.yml

Audits data lake access patterns, enforces retention policies, and publishes compliance reports.

naftiko: '0.5'
info:
  label: Data Lake Governance Pipeline
  description: Audits data lake access patterns, enforces retention policies, and publishes compliance reports.
  tags:
  - data-governance
  - bigquery
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: data_lake_governance_pipeline
      description: Orchestrate data lake governance pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-bigquery
        type: call
        call: bigquery.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-bigquery.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Data Lake Governance Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bigquery-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://alphabet.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-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 → data-lake-governance-pipeline.yml

Runs a Security Command Center scan, exports findings to BigQuery, generates a compliance summary in Google Sheets, and emails the report to the compliance team.

naftiko: '0.5'
info:
  label: Compliance Scan and Report Pipeline
  description: Runs a Security Command Center scan, exports findings to BigQuery, generates a compliance summary in Google Sheets, and emails the report to the compliance team.
  tags:
  - security
  - compliance
  - security-command-center
  - bigquery
  - google-sheets
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: compliance-reporting
    port: 8080
    tools:
    - name: run-compliance-report
      description: Scan via Security Command Center, store findings in BigQuery, create Sheets report, and email.
      inputParameters:
      - name: org_id
        in: body
        type: string
        description: The GCP organization ID.
      - name: project_id
        in: body
        type: string
        description: The GCP project for BigQuery.
      - name: bq_dataset
        in: body
        type: string
        description: The BigQuery dataset for findings.
      - name: spreadsheet_id
        in: body
        type: string
        description: The compliance report spreadsheet ID.
      - name: compliance_email
        in: body
        type: string
        description: The compliance team email address.
      steps:
      - name: list-findings
        type: call
        call: scc.list-findings
        with:
          org_id: '{{org_id}}'
      - name: store-findings
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: '{{bq_dataset}}'
          table_id: scc_findings
          rows: '{{list-findings.findings}}'
      - name: update-report
        type: call
        call: sheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: ComplianceReport!A1
          values: '{{list-findings.findings}}'
      - name: email-report
        type: call
        call: gmail.send-message
        with:
          to: '{{compliance_email}}'
          subject: Compliance Scan Report
          body: 'Security Command Center scan complete. {{list-findings.totalSize}} findings. Report: https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}.'
  consumes:
  - type: http
    namespace: scc
    baseUri: https://securitycenter.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: findings
      path: /organizations/{{org_id}}/sources/-/findings
      inputParameters:
      - name: org_id
        in: path
      operations:
      - name: list-findings
        method: GET
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → compliance-scan-and-report-pipeline.yml

Runs a Container Analysis scan on an Artifact Registry image, checks for critical CVEs, creates a Jira ticket if vulnerabilities found, and posts findings to Google Chat.

naftiko: '0.5'
info:
  label: Security Vulnerability Scan Pipeline
  description: Runs a Container Analysis scan on an Artifact Registry image, checks for critical CVEs, creates a Jira ticket if vulnerabilities found, and posts findings to Google Chat.
  tags:
  - security
  - devops
  - artifact-registry
  - jira
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: security-scanning
    port: 8080
    tools:
    - name: scan-and-report-vulnerabilities
      description: Scan a container image for vulnerabilities, report criticals to Jira and Google Chat.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: image_uri
        in: body
        type: string
        description: The full Artifact Registry image URI.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for security tickets.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for security alerts.
      steps:
      - name: get-vulnerabilities
        type: call
        call: containeranalysis.list-occurrences
        with:
          project_id: '{{project_id}}'
          image_uri: '{{image_uri}}'
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          summary: Critical CVEs found in {{image_uri}}
          description: 'Vulnerabilities detected: {{get-vulnerabilities.occurrences.length}} findings. Image: {{image_uri}}'
          issue_type: Bug
          priority: Critical
      - name: alert-security-team
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Security scan for {{image_uri}}: {{get-vulnerabilities.occurrences.length}} vulnerabilities found. Jira: {{create-jira-ticket.key}}.'
  consumes:
  - type: http
    namespace: containeranalysis
    baseUri: https://containeranalysis.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: occurrences
      path: /projects/{{project_id}}/occurrences
      inputParameters:
      - name: project_id
        in: path
      - name: filter
        in: query
      operations:
      - name: list-occurrences
        method: GET
  - type: http
    namespace: jira
    baseUri: https://alphabet.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: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → security-vulnerability-scan-pipeline.yml

Checks the health status of a monitored service. Used by Alphabet teams.

naftiko: '0.5'
info:
  label: Alphabet Service Health Check
  description: Checks the health status of a monitored service. Used by Alphabet teams.
  tags:
  - cloud
  - gcp
capability:
  exposes:
  - type: mcp
    namespace: gcp
    port: 8080
    tools:
    - name: get-service_health_check
      description: Checks the health status of a monitored service. Used by Alphabet teams.
      inputParameters:
      - name: health_target
        in: body
        type: string
        description: The health_target to look up.
      call: gcp.get-health_target
      with:
        health_target: '{{health_target}}'
  consumes:
  - type: http
    namespace: gcp
    baseUri: https://compute.googleapis.com/compute/v1/projects/alphabet
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: alphabet_service_health_check
        method: GET
Open in Framework → View in Fleet → alphabet-service-health-check.yml

Runs data quality validation queries on BigQuery tables, logs results to a Looker dashboard, and sends alerts for failures via Gmail.

naftiko: '0.5'
info:
  label: BigQuery Data Quality Check Pipeline
  description: Runs data quality validation queries on BigQuery tables, logs results to a Looker dashboard, and sends alerts for failures via Gmail.
  tags:
  - data
  - bigquery
  - looker
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: bq-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Validate data quality in BigQuery and report results.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: dataset
        in: body
        type: string
        description: The BigQuery dataset.
      - name: table
        in: body
        type: string
        description: The BigQuery table.
      - name: looker_instance
        in: body
        type: string
        description: Looker instance name.
      - name: dashboard_id
        in: body
        type: string
        description: Looker dashboard ID.
      - name: alert_email
        in: body
        type: string
        description: Email for failure alerts.
      steps:
      - name: run-quality-check
        type: call
        call: bigquery.insert-job
        with:
          project_id: '{{project_id}}'
          query: SELECT COUNT(*) as nulls FROM {{dataset}}.{{table}} WHERE key IS NULL
      - name: get-results
        type: call
        call: bigquery.get-job
        with:
          project_id: '{{project_id}}'
          job_id: '{{run-quality-check.jobReference.jobId}}'
      - name: update-dashboard
        type: call
        call: looker.get-dashboard
        with:
          dashboard_id: '{{dashboard_id}}'
      - name: send-alert
        type: call
        call: gmail.send-message
        with:
          to: '{{alert_email}}'
          subject: Data quality alert for {{dataset}}.{{table}}
          body: 'Nulls found: {{get-results.statistics.query.totalRows}}'
  consumes:
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: jobs
      path: /projects/{{project_id}}/jobs
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: insert-job
        method: POST
      - name: get-job
        method: GET
  - type: http
    namespace: looker
    baseUri: https://{{looker_instance}}.looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_api_token
    resources:
    - name: dashboards
      path: /dashboards/{{dashboard_id}}
      inputParameters:
      - name: dashboard_id
        in: path
      operations:
      - name: get-dashboard
        method: GET
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.gmail_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bigquery-data-quality-check-pipeline.yml

Queries metric values from a monitoring dashboard. Used by Alphabet teams.

naftiko: '0.5'
info:
  label: Alphabet Metric Dashboard Query
  description: Queries metric values from a monitoring dashboard. Used by Alphabet teams.
  tags:
  - cloud
  - bigquery
capability:
  exposes:
  - type: mcp
    namespace: bigquery
    port: 8080
    tools:
    - name: get-metric_dashboard_query
      description: Queries metric values from a monitoring dashboard. Used by Alphabet teams.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: The metric_name to look up.
      call: bigquery.get-metric_name
      with:
        metric_name: '{{metric_name}}'
  consumes:
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: alphabet_metric_dashboard_quer
        method: GET
Open in Framework → View in Fleet → alphabet-metric-dashboard-query.yml

Reads a range of cells from a Google Sheets spreadsheet.

naftiko: '0.5'
info:
  label: Google Sheets Cell Range Reader
  description: Reads a range of cells from a Google Sheets spreadsheet.
  tags:
  - data
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: googlesheets
    port: 8080
    tools:
    - name: get-values
      description: Read cell values from a specified range in Google Sheets.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      - name: range
        in: body
        type: string
        description: The A1 notation range to read.
      call: googlesheets.get-values
      with:
        spreadsheet_id: '{{spreadsheet_id}}'
        range: '{{range}}'
  consumes:
  - type: http
    namespace: googlesheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      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-cell-range-reader.yml

Checks the current status of a project. Used by Alphabet teams.

naftiko: '0.5'
info:
  label: Alphabet Project Status Check
  description: Checks the current status of a project. Used by Alphabet teams.
  tags:
  - cloud
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira
    port: 8080
    tools:
    - name: get-project_status_check
      description: Checks the current status of a project. Used by Alphabet teams.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The project_key to look up.
      call: jira.get-project_key
      with:
        project_key: '{{project_key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://alphabet.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: alphabet_project_status_check
        method: GET
Open in Framework → View in Fleet → alphabet-project-status-check.yml

Retrieves a Google Workspace user profile by email including org unit, last login, and admin status. Used by IT admins for identity audits.

naftiko: '0.5'
info:
  label: Google Workspace User Lookup
  description: Retrieves a Google Workspace user profile by email including org unit, last login, and admin status. Used by IT admins for identity audits.
  tags:
  - identity
  - google-workspace
  - admin
capability:
  exposes:
  - type: mcp
    namespace: workspace-admin
    port: 8080
    tools:
    - name: get-workspace-user
      description: Look up a Google Workspace user by primary email address.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user's primary email address.
      call: workspace.get-user
      with:
        user_email: '{{user_email}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.name.fullName
      - name: org_unit
        type: string
        mapping: $.orgUnitPath
      - name: last_login
        type: string
        mapping: $.lastLoginTime
      - name: is_admin
        type: boolean
        mapping: $.isAdmin
  consumes:
  - type: http
    namespace: workspace
    baseUri: https://admin.googleapis.com/admin/directory/v1
    authentication:
      type: bearer
      token: $secrets.workspace_admin_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 → google-workspace-user-lookup.yml

Checks Cloud Spanner instance metrics, queries CPU utilization from Cloud Monitoring, and posts a capacity summary with scaling recommendations to Google Chat.

naftiko: '0.5'
info:
  label: Spanner Capacity Planning Pipeline
  description: Checks Cloud Spanner instance metrics, queries CPU utilization from Cloud Monitoring, and posts a capacity summary with scaling recommendations to Google Chat.
  tags:
  - database
  - infrastructure
  - cloud-spanner
  - cloud-monitoring
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: spanner-capacity
    port: 8080
    tools:
    - name: assess-spanner-capacity
      description: Check Spanner instance, query CPU metrics, and post capacity recommendations.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: instance_id
        in: body
        type: string
        description: The Spanner instance identifier.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for capacity alerts.
      steps:
      - name: get-instance
        type: call
        call: spanner.get-instance
        with:
          project_id: '{{project_id}}'
          instance_id: '{{instance_id}}'
      - name: get-cpu-metrics
        type: call
        call: monitoring.query-timeseries
        with:
          project_id: '{{project_id}}'
          filter: metric.type="spanner.googleapis.com/instance/cpu/utilization" AND resource.labels.instance_id="{{instance_id}}"
      - name: post-summary
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Spanner capacity report for {{instance_id}}: {{get-instance.nodeCount}} nodes, state: {{get-instance.state}}. Avg CPU: {{get-cpu-metrics.timeSeries[0].points[0].value.doubleValue}}.'
  consumes:
  - type: http
    namespace: spanner
    baseUri: https://spanner.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: instances
      path: /projects/{{project_id}}/instances/{{instance_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: instance_id
        in: path
      operations:
      - name: get-instance
        method: GET
  - type: http
    namespace: monitoring
    baseUri: https://monitoring.googleapis.com/v3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: timeseries
      path: /projects/{{project_id}}/timeSeries
      inputParameters:
      - name: project_id
        in: path
      - name: filter
        in: query
      operations:
      - name: query-timeseries
        method: GET
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → spanner-capacity-planning-pipeline.yml

Submits a batch prediction job to Vertex AI, monitors completion, stores results in BigQuery, and notifies via Google Chat.

naftiko: '0.5'
info:
  label: Vertex AI Batch Prediction Pipeline
  description: Submits a batch prediction job to Vertex AI, monitors completion, stores results in BigQuery, and notifies via Google Chat.
  tags:
  - ai
  - machine-learning
  - google-cloud-platform
  - bigquery
  - google-workspace
capability:
  exposes:
  - type: mcp
    namespace: vertex-batch
    port: 8080
    tools:
    - name: run-batch-prediction
      description: Orchestrate a batch prediction pipeline across Vertex AI, BigQuery, and Google Chat.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The compute region.
      - name: model_id
        in: body
        type: string
        description: The Vertex AI model resource ID.
      - name: input_uri
        in: body
        type: string
        description: GCS URI for input data.
      - name: output_dataset
        in: body
        type: string
        description: BigQuery dataset for results.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for notifications.
      steps:
      - name: submit-prediction
        type: call
        call: vertexai.create-batch-job
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          model: '{{model_id}}'
          inputConfig: '{{input_uri}}'
      - name: check-job
        type: call
        call: vertexai.get-batch-job
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          job_id: '{{submit-prediction.name}}'
      - name: load-results
        type: call
        call: bigquery.insert-job
        with:
          project_id: '{{project_id}}'
          dataset: '{{output_dataset}}'
      - name: notify
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Batch prediction complete. Job: {{submit-prediction.name}}, loaded to {{output_dataset}}.'
  consumes:
  - type: http
    namespace: vertexai
    baseUri: https://aiplatform.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: batchPredictionJobs
      path: /projects/{{project_id}}/locations/{{region}}/batchPredictionJobs
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      operations:
      - name: create-batch-job
        method: POST
      - name: get-batch-job
        method: GET
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: jobs
      path: /projects/{{project_id}}/jobs
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: insert-job
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vertex-ai-batch-prediction-pipeline.yml

Fetches Terraform Cloud workspace state, compares it against Cloud Asset Inventory, identifies drift, and creates a GitHub issue for remediation.

naftiko: '0.5'
info:
  label: Terraform GCP Infrastructure Audit
  description: Fetches Terraform Cloud workspace state, compares it against Cloud Asset Inventory, identifies drift, and creates a GitHub issue for remediation.
  tags:
  - infrastructure
  - devops
  - terraform
  - github
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: infra-audit
    port: 8080
    tools:
    - name: audit-infrastructure-drift
      description: Compare Terraform state with GCP Cloud Asset Inventory and report drift to GitHub.
      inputParameters:
      - name: terraform_workspace
        in: body
        type: string
        description: The Terraform Cloud workspace ID.
      - name: project_id
        in: body
        type: string
        description: The GCP project ID to audit.
      - name: github_repo
        in: body
        type: string
        description: The GitHub repository (owner/repo) for drift issues.
      steps:
      - name: get-tf-state
        type: call
        call: terraform.get-workspace-state
        with:
          workspace_id: '{{terraform_workspace}}'
      - name: get-asset-inventory
        type: call
        call: cloudasset.search-resources
        with:
          project_id: '{{project_id}}'
      - name: create-drift-issue
        type: call
        call: github.create-issue
        with:
          repo: '{{github_repo}}'
          title: Infrastructure drift detected in {{project_id}}
          body: 'Terraform state resources: {{get-tf-state.resources.length}}. GCP asset inventory resources: {{get-asset-inventory.results.length}}. Review and reconcile.'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_cloud_token
    resources:
    - name: workspaces
      path: /workspaces/{{workspace_id}}/current-state-version
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: get-workspace-state
        method: GET
  - type: http
    namespace: cloudasset
    baseUri: https://cloudasset.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: resources
      path: /projects/{{project_id}}/assets
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: search-resources
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/{{repo}}/issues
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → terraform-gcp-infrastructure-audit.yml

Checks Cloud SQL instance health, triggers an on-demand backup, verifies backup completion, and sends a health report to the DBA team via Gmail.

naftiko: '0.5'
info:
  label: Cloud SQL Backup and Health Pipeline
  description: Checks Cloud SQL instance health, triggers an on-demand backup, verifies backup completion, and sends a health report to the DBA team via Gmail.
  tags:
  - database
  - infrastructure
  - cloud-sql
  - gmail
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: cloudsql-ops
    port: 8080
    tools:
    - name: backup-and-report
      description: Check Cloud SQL health, trigger backup, verify, and email report to DBA team.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: instance_name
        in: body
        type: string
        description: The Cloud SQL instance name.
      - name: dba_email
        in: body
        type: string
        description: DBA team email for health reports.
      steps:
      - name: get-instance-health
        type: call
        call: cloudsql.get-instance
        with:
          project_id: '{{project_id}}'
          instance_name: '{{instance_name}}'
      - name: trigger-backup
        type: call
        call: cloudsql.create-backup
        with:
          project_id: '{{project_id}}'
          instance_name: '{{instance_name}}'
      - name: send-report
        type: call
        call: gmail.send-message
        with:
          to: '{{dba_email}}'
          subject: 'Cloud SQL Health: {{instance_name}}'
          body: 'Instance {{instance_name}} state: {{get-instance-health.state}}. Version: {{get-instance-health.databaseVersion}}. Backup initiated: {{trigger-backup.id}}.'
  consumes:
  - type: http
    namespace: cloudsql
    baseUri: https://sqladmin.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: instances
      path: /projects/{{project_id}}/instances/{{instance_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: instance_name
        in: path
      operations:
      - name: get-instance
        method: GET
    - name: backups
      path: /projects/{{project_id}}/instances/{{instance_name}}/backupRuns
      inputParameters:
      - name: project_id
        in: path
      - name: instance_name
        in: path
      operations:
      - name: create-backup
        method: POST
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cloud-sql-backup-and-health-pipeline.yml

Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Pipeline
  description: Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.
  tags:
  - procurement
  - servicenow
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: vendor_risk_assessment_pipeline
      description: Orchestrate vendor risk assessment pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Vendor Risk Assessment Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://alphabet.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: confluence
    baseUri: https://alphabet.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-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-risk-assessment-pipeline.yml

Retrieves details of a specific event from a Google Calendar.

naftiko: '0.5'
info:
  label: Google Calendar Event Retrieval
  description: Retrieves details of a specific event from a Google Calendar.
  tags:
  - collaboration
  - google-workspace
capability:
  exposes:
  - type: mcp
    namespace: googlecalendar
    port: 8080
    tools:
    - name: get-event
      description: Retrieve a specific calendar event by ID.
      inputParameters:
      - name: calendar_id
        in: body
        type: string
        description: The Google Calendar ID.
      - name: event_id
        in: body
        type: string
        description: The calendar event ID.
      call: googlecalendar.get-event
      with:
        calendar_id: '{{calendar_id}}'
        event_id: '{{event_id}}'
  consumes:
  - type: http
    namespace: googlecalendar
    baseUri: https://www.googleapis.com/calendar/v3
    authentication:
      type: bearer
      token: $secrets.google_calendar_token
    resources:
    - name: events
      path: /calendars/{{calendar_id}}/events/{{event_id}}
      inputParameters:
      - name: calendar_id
        in: path
      - name: event_id
        in: path
      operations:
      - name: get-event
        method: GET
Open in Framework → View in Fleet → google-calendar-event-retrieval.yml

Retrieves organic search performance data from Search Console including clicks, impressions, CTR, and average position for a given site.

naftiko: '0.5'
info:
  label: Google Search Console Performance
  description: Retrieves organic search performance data from Search Console including clicks, impressions, CTR, and average position for a given site.
  tags:
  - seo
  - analytics
  - google-search-console
capability:
  exposes:
  - type: mcp
    namespace: search-console
    port: 8080
    tools:
    - name: get-search-performance
      description: Query Search Console search analytics for a verified property. Returns clicks, impressions, CTR, and position.
      inputParameters:
      - name: site_url
        in: body
        type: string
        description: The verified site URL (e.g. https://example.com).
      - 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: searchconsole.query-analytics
      with:
        site_url: '{{site_url}}'
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
  consumes:
  - type: http
    namespace: searchconsole
    baseUri: https://searchconsole.googleapis.com/webmasters/v3
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: search-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.yml

Audits IAM role bindings across a GCP organization, identifies overprivileged accounts, exports findings to BigQuery, and alerts security team.

naftiko: '0.5'
info:
  label: Cloud IAM Role Audit Pipeline
  description: Audits IAM role bindings across a GCP organization, identifies overprivileged accounts, exports findings to BigQuery, and alerts security team.
  tags:
  - security
  - google-cloud-platform
  - bigquery
capability:
  exposes:
  - type: mcp
    namespace: iam-audit
    port: 8080
    tools:
    - name: run-iam-audit
      description: Audit IAM role bindings and report overprivileged accounts.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: dataset
        in: body
        type: string
        description: BigQuery dataset for audit results.
      - name: table
        in: body
        type: string
        description: BigQuery table.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for security alerts.
      steps:
      - name: get-iam-policy
        type: call
        call: cloudresourcemanager.get-iam-policy
        with:
          project_id: '{{project_id}}'
      - name: export-findings
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset: '{{dataset}}'
          table: '{{table}}'
      - name: alert-security
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: IAM audit complete for {{project_id}}.
  consumes:
  - type: http
    namespace: cloudresourcemanager
    baseUri: https://cloudresourcemanager.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: projects
      path: /projects/{{project_id}}:getIamPolicy
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-iam-policy
        method: POST
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset}}/tables/{{table}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset
        in: path
      - name: table
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → cloud-iam-role-audit-pipeline.yml

Submits a Spark job to a Dataproc cluster, monitors execution, exports results to Cloud Storage, and notifies the data team via Google Chat.

naftiko: '0.5'
info:
  label: Dataproc Spark Job Orchestration
  description: Submits a Spark job to a Dataproc cluster, monitors execution, exports results to Cloud Storage, and notifies the data team via Google Chat.
  tags:
  - data
  - analytics
  - dataproc
  - apache-spark
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: dataproc-jobs
    port: 8080
    tools:
    - name: run-spark-job
      description: Submit a Spark job to Dataproc, monitor, export results, and notify team.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Dataproc region.
      - name: cluster_name
        in: body
        type: string
        description: The Dataproc cluster name.
      - name: main_jar_uri
        in: body
        type: string
        description: GCS URI of the Spark job JAR.
      - name: output_bucket
        in: body
        type: string
        description: GCS bucket for job output.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for job notifications.
      steps:
      - name: submit-job
        type: call
        call: dataproc.submit-job
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          cluster_name: '{{cluster_name}}'
          main_jar_uri: '{{main_jar_uri}}'
          output_uri: gs://{{output_bucket}}/spark-output
      - name: check-job-status
        type: call
        call: dataproc.get-job
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          job_id: '{{submit-job.reference.jobId}}'
      - name: notify-team
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Spark job {{submit-job.reference.jobId}} on cluster {{cluster_name}}: status {{check-job-status.status.state}}. Output: gs://{{output_bucket}}/spark-output.'
  consumes:
  - type: http
    namespace: dataproc
    baseUri: https://dataproc.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: jobs
      path: /projects/{{project_id}}/regions/{{region}}/jobs:submit
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      operations:
      - name: submit-job
        method: POST
    - name: job-status
      path: /projects/{{project_id}}/regions/{{region}}/jobs/{{job_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: job_id
        in: path
      operations:
      - name: get-job
        method: GET
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → dataproc-spark-job-orchestration.yml

Collects resource utilization from Cloud Monitoring, adjusts HPA thresholds on GKE, validates the change, and posts results to Microsoft Teams.

naftiko: '0.5'
info:
  label: GKE Pod Autoscaler Tuning Pipeline
  description: Collects resource utilization from Cloud Monitoring, adjusts HPA thresholds on GKE, validates the change, and posts results to Microsoft Teams.
  tags:
  - containers
  - monitoring
  - google-cloud-platform
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: gke-autoscale
    port: 8080
    tools:
    - name: run-autoscaler-tuning
      description: Tune GKE pod autoscaler based on monitoring metrics and notify via Teams.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: zone
        in: body
        type: string
        description: The cluster zone.
      - name: cluster_name
        in: body
        type: string
        description: The GKE cluster name.
      - name: team_id
        in: body
        type: string
        description: Microsoft Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: Teams channel ID.
      steps:
      - name: get-metrics
        type: call
        call: cloudmonitoring.list-timeseries
        with:
          project_id: '{{project_id}}'
          filter: resource.type=k8s_container
      - name: get-cluster-info
        type: call
        call: gke.get-cluster
        with:
          project_id: '{{project_id}}'
          zone: '{{zone}}'
          cluster_name: '{{cluster_name}}'
      - name: update-hpa
        type: call
        call: gke.update-cluster
        with:
          project_id: '{{project_id}}'
          zone: '{{zone}}'
          cluster_name: '{{cluster_name}}'
          metrics: '{{get-metrics}}'
      - name: notify-team
        type: call
        call: teams.send-message
        with:
          team_id: '{{team_id}}'
          channel_id: '{{channel_id}}'
          text: 'HPA tuning for {{cluster_name}}: updated based on utilization metrics.'
  consumes:
  - type: http
    namespace: cloudmonitoring
    baseUri: https://monitoring.googleapis.com/v3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: timeseries
      path: /projects/{{project_id}}/timeSeries
      inputParameters:
      - name: project_id
        in: path
      - name: filter
        in: query
      operations:
      - name: list-timeseries
        method: GET
  - type: http
    namespace: gke
    baseUri: https://container.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: clusters
      path: /projects/{{project_id}}/locations/{{zone}}/clusters/{{cluster_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: zone
        in: path
      - name: cluster_name
        in: path
      operations:
      - name: get-cluster
        method: GET
      - name: update-cluster
        method: PUT
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: 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 → gke-pod-autoscaler-tuning-pipeline.yml

Audits a Cloud Storage bucket for compliance: checks metadata, verifies IAM policies, scans for public access, and logs findings to BigQuery with a Google Chat alert.

naftiko: '0.5'
info:
  label: Bucket Compliance Check Pipeline
  description: 'Audits a Cloud Storage bucket for compliance: checks metadata, verifies IAM policies, scans for public access, and logs findings to BigQuery with a Google Chat alert.'
  tags:
  - storage
  - security
  - compliance
  - gcp-cloud-storage
  - bigquery
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: storage-compliance
    port: 8080
    tools:
    - name: audit-bucket-compliance
      description: Check bucket metadata, IAM policy, log findings to BigQuery, and alert on non-compliance.
      inputParameters:
      - name: bucket_name
        in: body
        type: string
        description: The Cloud Storage bucket name.
      - name: project_id
        in: body
        type: string
        description: The GCP project ID for logging.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for compliance alerts.
      steps:
      - name: get-bucket-info
        type: call
        call: cloudstorage.get-bucket
        with:
          bucket_name: '{{bucket_name}}'
      - name: get-bucket-iam
        type: call
        call: cloudstorage.get-bucket-iam
        with:
          bucket_name: '{{bucket_name}}'
      - name: log-findings
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: compliance_audits
          table_id: bucket_findings
          rows: '[{"bucket": "{{bucket_name}}", "storage_class": "{{get-bucket-info.storageClass}}", "versioning": "{{get-bucket-info.versioning.enabled}}", "iam_bindings": "{{get-bucket-iam.bindings.length}}"}]'
      - name: alert-team
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Bucket audit for {{bucket_name}}: class={{get-bucket-info.storageClass}}, versioning={{get-bucket-info.versioning.enabled}}, IAM bindings={{get-bucket-iam.bindings.length}}. Full report in compliance_audits.bucket_findings.'
  consumes:
  - type: http
    namespace: cloudstorage
    baseUri: https://storage.googleapis.com/storage/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: buckets
      path: /b/{{bucket_name}}
      inputParameters:
      - name: bucket_name
        in: path
      operations:
      - name: get-bucket
        method: GET
    - name: bucket-iam
      path: /b/{{bucket_name}}/iam
      inputParameters:
      - name: bucket_name
        in: path
      operations:
      - name: get-bucket-iam
        method: GET
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → bucket-compliance-check-pipeline.yml

Fetches the current Firebase Remote Config template for a project.

naftiko: '0.5'
info:
  label: Firebase Remote Config Fetch
  description: Fetches the current Firebase Remote Config template for a project.
  tags:
  - mobile
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: firebase
    port: 8080
    tools:
    - name: get-config
      description: Fetch the current Remote Config template for a Firebase project.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Firebase project ID.
      call: firebase.get-config
      with:
        project_id: '{{project_id}}'
  consumes:
  - type: http
    namespace: firebase
    baseUri: https://firebaseremoteconfig.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: remoteConfig
      path: /projects/{{project_id}}/remoteConfig
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-config
        method: GET
Open in Framework → View in Fleet → firebase-remote-config-fetch.yml

Retrieves feature values from a Vertex AI Feature Store for online serving.

naftiko: '0.5'
info:
  label: Vertex AI Feature Store Lookup
  description: Retrieves feature values from a Vertex AI Feature Store for online serving.
  tags:
  - ai
  - machine-learning
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: vertexfeaturestore
    port: 8080
    tools:
    - name: get-featurestore
      description: Retrieve a Vertex AI Feature Store instance and its configuration.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The feature store region.
      - name: featurestore_id
        in: body
        type: string
        description: The feature store ID.
      call: vertexfeaturestore.get-featurestore
      with:
        project_id: '{{project_id}}'
        region: '{{region}}'
        featurestore_id: '{{featurestore_id}}'
  consumes:
  - type: http
    namespace: vertexfeaturestore
    baseUri: https://aiplatform.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: featurestores
      path: /projects/{{project_id}}/locations/{{region}}/featurestores/{{featurestore_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: featurestore_id
        in: path
      operations:
      - name: get-featurestore
        method: GET
Open in Framework → View in Fleet → vertex-ai-feature-store-lookup.yml

Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.

naftiko: '0.5'
info:
  label: API Deprecation Notice Pipeline
  description: Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.
  tags:
  - engineering
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: api_deprecation_notice_pipeline
      description: Orchestrate api deprecation notice 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-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: API Deprecation Notice Pipeline step 3 complete.
  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: jira
    baseUri: https://alphabet.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 → api-deprecation-notice-pipeline.yml

Pulls campaign performance from Google Ads, calculates optimal budget distribution, updates campaigns, and logs changes to Google Sheets.

naftiko: '0.5'
info:
  label: Google Ads Budget Reallocation Pipeline
  description: Pulls campaign performance from Google Ads, calculates optimal budget distribution, updates campaigns, and logs changes to Google Sheets.
  tags:
  - marketing
  - google-ads
  - google-sheets
capability:
  exposes:
  - type: mcp
    namespace: ads-budget-realloc
    port: 8080
    tools:
    - name: run-budget-reallocation
      description: Optimize Google Ads campaign budgets based on performance data.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: Google Ads customer ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: Google Sheets spreadsheet ID.
      - name: range
        in: body
        type: string
        description: Cell range.
      steps:
      - name: get-performance
        type: call
        call: googleads.search-stream
        with:
          customer_id: '{{customer_id}}'
          query: SELECT campaign.id, metrics.cost_micros FROM campaign
      - name: update-budgets
        type: call
        call: googleads.search-stream
        with:
          customer_id: '{{customer_id}}'
          query: UPDATE campaign SET budget={{get-performance.optimal_budget}}
      - name: log-changes
        type: call
        call: googlesheets.append-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: '{{range}}'
  consumes:
  - type: http
    namespace: googleads
    baseUri: https://googleads.googleapis.com/v14
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    resources:
    - name: customers
      path: /customers/{{customer_id}}/googleAds:searchStream
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: search-stream
        method: POST
  - type: http
    namespace: googlesheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-values
        method: POST
Open in Framework → View in Fleet → google-ads-budget-reallocation-pipeline.yml

Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM.

naftiko: '0.5'
info:
  label: Customer 360 Data Sync Pipeline
  description: Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM.
  tags:
  - data
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: customer_360_data_sync_pipeline
      description: Orchestrate customer 360 data 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:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Customer 360 Data Sync Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://alphabet.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://alphabet.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 → customer-360-data-sync-pipeline.yml

Exports GCP billing data from BigQuery, fetches comparable data from the Cloud Billing API, generates a cost summary, and posts it to a Google Sheets dashboard with Gmail notification.

naftiko: '0.5'
info:
  label: Multi-Cloud Cost Reporting Pipeline
  description: Exports GCP billing data from BigQuery, fetches comparable data from the Cloud Billing API, generates a cost summary, and posts it to a Google Sheets dashboard with Gmail notification.
  tags:
  - finops
  - billing
  - bigquery
  - google-sheets
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: cost-reporting
    port: 8080
    tools:
    - name: generate-cost-report
      description: Build a cost report from BigQuery billing exports and publish to Sheets with email alert.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: billing_dataset
        in: body
        type: string
        description: The BigQuery dataset containing billing exports.
      - name: billing_table
        in: body
        type: string
        description: The billing export table name.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID for the dashboard.
      - name: notify_email
        in: body
        type: string
        description: Finance team email for report notifications.
      steps:
      - name: query-billing
        type: call
        call: bigquery.run-query
        with:
          project_id: '{{project_id}}'
          query: SELECT service.description, SUM(cost) as total_cost FROM `{{project_id}}.{{billing_dataset}}.{{billing_table}}` GROUP BY service.description ORDER BY total_cost DESC
      - name: update-sheet
        type: call
        call: sheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: CostReport!A1
          values: '{{query-billing.rows}}'
      - name: email-report
        type: call
        call: gmail.send-message
        with:
          to: '{{notify_email}}'
          subject: GCP Cost Report Updated
          body: 'The cost dashboard has been refreshed. View at https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}. Total services: {{query-billing.totalRows}}.'
  consumes:
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: jobs
      path: /projects/{{project_id}}/queries
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → multi-cloud-cost-reporting-pipeline.yml

Creates a Google Calendar event with attendees, generates a Google Meet link, and sends a custom invitation email via Gmail.

naftiko: '0.5'
info:
  label: Google Calendar Meeting Scheduler
  description: Creates a Google Calendar event with attendees, generates a Google Meet link, and sends a custom invitation email via Gmail.
  tags:
  - productivity
  - google-workspace
  - google-calendar
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: calendar-scheduling
    port: 8080
    tools:
    - name: schedule-meeting
      description: Create a Calendar event with Meet link and send custom email invitation.
      inputParameters:
      - name: summary
        in: body
        type: string
        description: The meeting title.
      - name: start_time
        in: body
        type: string
        description: The start time in RFC 3339 format.
      - name: end_time
        in: body
        type: string
        description: The end time in RFC 3339 format.
      - name: attendees
        in: body
        type: string
        description: Comma-separated list of attendee email addresses.
      - name: custom_message
        in: body
        type: string
        description: Custom message body for the invitation email.
      steps:
      - name: create-event
        type: call
        call: calendar.create-event
        with:
          summary: '{{summary}}'
          start_time: '{{start_time}}'
          end_time: '{{end_time}}'
          attendees: '{{attendees}}'
          conference_data: hangoutsMeet
      - name: send-invite
        type: call
        call: gmail.send-message
        with:
          to: '{{attendees}}'
          subject: 'Meeting: {{summary}}'
          body: '{{custom_message}}


            Join: {{create-event.hangoutLink}}

            When: {{start_time}} - {{end_time}}'
  consumes:
  - type: http
    namespace: calendar
    baseUri: https://www.googleapis.com/calendar/v3
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: events
      path: /calendars/primary/events
      operations:
      - name: create-event
        method: POST
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-calendar-meeting-scheduler.yml

Queries Cloud Logging for error entries in a given service, creates a summary, posts it to Google Chat, and opens a ServiceNow incident.

naftiko: '0.5'
info:
  label: Cloud Logging Error Alert Pipeline
  description: Queries Cloud Logging for error entries in a given service, creates a summary, posts it to Google Chat, and opens a ServiceNow incident.
  tags:
  - operations
  - monitoring
  - cloud-logging
  - servicenow
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: log-alerting
    port: 8080
    tools:
    - name: alert-on-errors
      description: Query Cloud Logging for errors, alert via Google Chat, and create ServiceNow incident.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: service_name
        in: body
        type: string
        description: The service name to filter logs.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for alerts.
      - name: snow_assignment_group
        in: body
        type: string
        description: ServiceNow assignment group for the incident.
      steps:
      - name: query-errors
        type: call
        call: logging.list-entries
        with:
          project_id: '{{project_id}}'
          filter: resource.labels.service_name={{service_name}} severity=ERROR
      - name: post-alert
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Error alert for {{service_name}}: {{query-errors.entries.length}} error entries detected in the last hour.'
      - name: open-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Elevated errors in {{service_name}}
          category: application
          assigned_group: '{{snow_assignment_group}}'
          description: '{{query-errors.entries.length}} error log entries detected for service {{service_name}} in project {{project_id}}.'
  consumes:
  - type: http
    namespace: logging
    baseUri: https://logging.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: entries
      path: /entries:list
      operations:
      - name: list-entries
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://alphabet.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 → cloud-logging-error-alert-pipeline.yml

Retrieves the details of a Google Cloud Armor security policy including rules and targets.

naftiko: '0.5'
info:
  label: Cloud Armor Security Policy Lookup
  description: Retrieves the details of a Google Cloud Armor security policy including rules and targets.
  tags:
  - security
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: cloudarmor
    port: 8080
    tools:
    - name: get-policy
      description: Retrieve a Cloud Armor security policy by name.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: policy_name
        in: body
        type: string
        description: The security policy name.
      call: cloudarmor.get-policy
      with:
        project_id: '{{project_id}}'
        policy_name: '{{policy_name}}'
  consumes:
  - type: http
    namespace: cloudarmor
    baseUri: https://compute.googleapis.com/compute/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: policies
      path: /projects/{{project_id}}/global/securityPolicies/{{policy_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: policy_name
        in: path
      operations:
      - name: get-policy
        method: GET
Open in Framework → View in Fleet → cloud-armor-security-policy-lookup.yml

Retrieves the details of a support ticket. Used by Alphabet teams.

naftiko: '0.5'
info:
  label: Alphabet Ticket Details Lookup
  description: Retrieves the details of a support ticket. Used by Alphabet teams.
  tags:
  - cloud
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: get-ticket_details_lookup
      description: Retrieves the details of a support ticket. Used by Alphabet teams.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The ticket_id to look up.
      call: grafana.get-ticket_id
      with:
        ticket_id: '{{ticket_id}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://alphabet-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: alphabet_ticket_details_lookup
        method: GET
Open in Framework → View in Fleet → alphabet-ticket-details-lookup.yml

Uploads an APK to Google Play Developer API, promotes it to the internal test track, triggers Firebase Test Lab tests, and notifies the team on Google Chat.

naftiko: '0.5'
info:
  label: Android App Release Pipeline
  description: Uploads an APK to Google Play Developer API, promotes it to the internal test track, triggers Firebase Test Lab tests, and notifies the team on Google Chat.
  tags:
  - mobile
  - devops
  - google-android
  - firebase
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: android-release
    port: 8080
    tools:
    - name: release-android-app
      description: Upload APK, promote to test track, run Firebase tests, and notify team.
      inputParameters:
      - name: package_name
        in: body
        type: string
        description: The Android app package name.
      - name: apk_path
        in: body
        type: string
        description: GCS path to the APK file.
      - name: track
        in: body
        type: string
        description: The release track (internal, alpha, beta, production).
      - name: project_id
        in: body
        type: string
        description: Firebase project ID for Test Lab.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for release notifications.
      steps:
      - name: upload-apk
        type: call
        call: playdev.upload-apk
        with:
          package_name: '{{package_name}}'
          apk_path: '{{apk_path}}'
      - name: promote-track
        type: call
        call: playdev.update-track
        with:
          package_name: '{{package_name}}'
          track: '{{track}}'
          version_code: '{{upload-apk.versionCode}}'
      - name: run-tests
        type: call
        call: testlab.run-test
        with:
          project_id: '{{project_id}}'
          apk_gcs_path: '{{apk_path}}'
      - name: notify-team
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Android release: {{package_name}} v{{upload-apk.versionCode}} promoted to {{track}}. Test Lab execution: {{run-tests.testExecutionId}}.'
  consumes:
  - type: http
    namespace: playdev
    baseUri: https://androidpublisher.googleapis.com/androidpublisher/v3
    authentication:
      type: bearer
      token: $secrets.google_play_token
    resources:
    - name: apks
      path: /applications/{{package_name}}/edits/upload
      inputParameters:
      - name: package_name
        in: path
      operations:
      - name: upload-apk
        method: POST
    - name: tracks
      path: /applications/{{package_name}}/edits/tracks/{{track}}
      inputParameters:
      - name: package_name
        in: path
      - name: track
        in: path
      operations:
      - name: update-track
        method: PUT
  - type: http
    namespace: testlab
    baseUri: https://testing.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: test-executions
      path: /projects/{{project_id}}/testMatrices
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: run-test
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → android-app-release-pipeline.yml

Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.

naftiko: '0.5'
info:
  label: Data Quality Monitoring Pipeline
  description: Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.
  tags:
  - data-quality
  - snowflake
  - jira
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: data_quality_monitoring_pipeline
      description: Orchestrate data quality monitoring 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:
          data: '{{get-snowflake.result}}'
      - name: create-grafana
        type: call
        call: grafana.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Data Quality Monitoring Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://alphabet.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://alphabet.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://alphabet-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 → data-quality-monitoring-pipeline.yml

Creates a Gmail label and associates a filter rule to automatically categorize incoming messages matching a specified query.

naftiko: '0.5'
info:
  label: Gmail Label and Filter Management
  description: Creates a Gmail label and associates a filter rule to automatically categorize incoming messages matching a specified query.
  tags:
  - productivity
  - gmail
  - automation
capability:
  exposes:
  - type: mcp
    namespace: gmail-automation
    port: 8080
    tools:
    - name: create-label-and-filter
      description: Create a Gmail label and a matching filter to auto-categorize emails.
      inputParameters:
      - name: label_name
        in: body
        type: string
        description: The new label name.
      - name: filter_query
        in: body
        type: string
        description: The Gmail search query for the filter (e.g. from:noreply@example.com).
      steps:
      - name: create-label
        type: call
        call: gmail.create-label
        with:
          name: '{{label_name}}'
      - name: create-filter
        type: call
        call: gmail.create-filter
        with:
          query: '{{filter_query}}'
          add_label_id: '{{create-label.id}}'
  consumes:
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: labels
      path: /users/me/labels
      operations:
      - name: create-label
        method: POST
    - name: filters
      path: /users/me/settings/filters
      operations:
      - name: create-filter
        method: POST
Open in Framework → View in Fleet → gmail-label-and-filter-management.yml

Builds a container image via Cloud Build, pushes to Artifact Registry, updates a GKE deployment manifest, and triggers a rolling update with Slack notification.

naftiko: '0.5'
info:
  label: GKE Deployment Rollout Pipeline
  description: Builds a container image via Cloud Build, pushes to Artifact Registry, updates a GKE deployment manifest, and triggers a rolling update with Slack notification.
  tags:
  - devops
  - ci-cd
  - gke
  - cloud-build
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: gke-deployment
    port: 8080
    tools:
    - name: deploy-to-gke
      description: Build, push, and deploy a container to GKE with Cloud Build and Artifact Registry.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: repo_source
        in: body
        type: string
        description: The Cloud Source Repository name.
      - name: branch
        in: body
        type: string
        description: The branch to build from.
      - name: image_name
        in: body
        type: string
        description: The container image name.
      - name: cluster_name
        in: body
        type: string
        description: The GKE cluster name.
      - name: zone
        in: body
        type: string
        description: The GKE cluster zone.
      - name: deployment_name
        in: body
        type: string
        description: The Kubernetes deployment name.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for deploy notifications.
      steps:
      - name: trigger-build
        type: call
        call: cloudbuild.create-build
        with:
          project_id: '{{project_id}}'
          repo_source: '{{repo_source}}'
          branch: '{{branch}}'
          image_name: '{{image_name}}'
      - name: check-build
        type: call
        call: cloudbuild.get-build
        with:
          project_id: '{{project_id}}'
          build_id: '{{trigger-build.metadata.build.id}}'
      - name: update-deployment
        type: call
        call: gke.update-deployment-image
        with:
          project_id: '{{project_id}}'
          zone: '{{zone}}'
          cluster_name: '{{cluster_name}}'
          deployment_name: '{{deployment_name}}'
          image: '{{check-build.results.images[0].name}}'
      - name: notify-deploy
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Deployed {{image_name}} to {{cluster_name}}/{{deployment_name}}. Build: {{trigger-build.metadata.build.id}}. Image: {{check-build.results.images[0].name}}.'
  consumes:
  - type: http
    namespace: cloudbuild
    baseUri: https://cloudbuild.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: builds
      path: /projects/{{project_id}}/builds
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: create-build
        method: POST
    - name: build-status
      path: /projects/{{project_id}}/builds/{{build_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: build_id
        in: path
      operations:
      - name: get-build
        method: GET
  - type: http
    namespace: gke
    baseUri: https://container.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: deployments
      path: /projects/{{project_id}}/zones/{{zone}}/clusters/{{cluster_name}}/deployments/{{deployment_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: zone
        in: path
      - name: cluster_name
        in: path
      - name: deployment_name
        in: path
      operations:
      - name: update-deployment-image
        method: PATCH
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → gke-deployment-rollout-pipeline.yml

Checks the status and revision details of a Cloud Run service including traffic allocation, container image, and readiness conditions.

naftiko: '0.5'
info:
  label: Cloud Run Service Status
  description: Checks the status and revision details of a Cloud Run service including traffic allocation, container image, and readiness conditions.
  tags:
  - cloud
  - infrastructure
  - cloud-run
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: cloudrun-ops
    port: 8080
    tools:
    - name: get-service-status
      description: Retrieve Cloud Run service details by name and region. Returns latest revision, traffic split, and readiness.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Cloud Run region (e.g. us-central1).
      - name: service_name
        in: body
        type: string
        description: The Cloud Run service name.
      call: cloudrun.get-service
      with:
        project_id: '{{project_id}}'
        region: '{{region}}'
        service_name: '{{service_name}}'
      outputParameters:
      - name: latest_revision
        type: string
        mapping: $.status.latestReadyRevisionName
      - name: url
        type: string
        mapping: $.status.url
      - name: ready
        type: boolean
        mapping: $.status.conditions[0].status
  consumes:
  - type: http
    namespace: cloudrun
    baseUri: https://run.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: services
      path: /projects/{{project_id}}/locations/{{region}}/services/{{service_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: service_name
        in: path
      operations:
      - name: get-service
        method: GET
Open in Framework → View in Fleet → cloud-run-service-status.yml

Sends a prompt to the Gemini generative model and returns the generated text response. Used for content generation, summarization, and Q&A.

naftiko: '0.5'
info:
  label: Gemini Text Generation
  description: Sends a prompt to the Gemini generative model and returns the generated text response. Used for content generation, summarization, and Q&A.
  tags:
  - ai
  - machine-learning
  - gemini
  - generative-ai
capability:
  exposes:
  - type: mcp
    namespace: gemini-gen
    port: 8080
    tools:
    - name: generate-text
      description: Generate text via Gemini model given a prompt and optional temperature setting.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: prompt
        in: body
        type: string
        description: The text prompt for generation.
      - name: temperature
        in: body
        type: number
        description: Sampling temperature between 0.0 and 1.0.
      call: gemini.generate-content
      with:
        project_id: '{{project_id}}'
        prompt: '{{prompt}}'
        temperature: '{{temperature}}'
  consumes:
  - type: http
    namespace: gemini
    baseUri: https://generativelanguage.googleapis.com/v1beta
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: models
      path: /projects/{{project_id}}/locations/us-central1/publishers/google/models/gemini-pro:generateContent
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: generate-content
        method: POST
Open in Framework → View in Fleet → gemini-text-generation.yml

Checks the state and progress of a Google Cloud Dataflow job including current stage, elapsed time, and watermark. Used by data engineers for pipeline monitoring.

naftiko: '0.5'
info:
  label: Cloud Dataflow Job Status
  description: Checks the state and progress of a Google Cloud Dataflow job including current stage, elapsed time, and watermark. Used by data engineers for pipeline monitoring.
  tags:
  - data
  - pipelines
  - google-cloud-dataflow
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: dataflow-ops
    port: 8080
    tools:
    - name: get-job-status
      description: Retrieve Dataflow job status by project, region, and job ID.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Dataflow region.
      - name: job_id
        in: body
        type: string
        description: The Dataflow job identifier.
      call: dataflow.get-job
      with:
        project_id: '{{project_id}}'
        region: '{{region}}'
        job_id: '{{job_id}}'
      outputParameters:
      - name: current_state
        type: string
        mapping: $.currentState
      - name: create_time
        type: string
        mapping: $.createTime
      - name: job_name
        type: string
        mapping: $.name
  consumes:
  - type: http
    namespace: dataflow
    baseUri: https://dataflow.googleapis.com/v1b3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: jobs
      path: /projects/{{project_id}}/locations/{{region}}/jobs/{{job_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: job_id
        in: path
      operations:
      - name: get-job
        method: GET
Open in Framework → View in Fleet → cloud-dataflow-job-status.yml

Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.

naftiko: '0.5'
info:
  label: Security Incident Response Pipeline
  description: Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.
  tags:
  - security
  - splunk
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: security_incident_response_pipeline
      description: Orchestrate security incident response pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-splunk
        type: call
        call: splunk.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-splunk.result}}'
      - name: create-bigquery
        type: call
        call: bigquery.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Security Incident Response Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://alphabet-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: splunk-op
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://alphabet.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: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: bigquery-op
        method: POST
Open in Framework → View in Fleet → security-incident-response-pipeline.yml

Initiates review cycles, collects feedback, aggregates scores, and distributes to managers.

naftiko: '0.5'
info:
  label: Performance Review Cycle Pipeline
  description: Initiates review cycles, collects feedback, aggregates scores, and distributes to managers.
  tags:
  - hr
  - workday
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: performance_review_cycle_pipeline
      description: Orchestrate performance review cycle pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-gcp
        type: call
        call: gcp.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-gcp.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Performance Review Cycle Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: gcp
    baseUri: https://compute.googleapis.com/compute/v1/projects/alphabet
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: gcp-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://alphabet.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-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 → performance-review-cycle-pipeline.yml

On employee termination, suspends the Google Workspace account, transfers Drive files to the manager, revokes OAuth tokens, and logs the offboarding event to BigQuery.

naftiko: '0.5'
info:
  label: Workspace User Offboarding Pipeline
  description: On employee termination, suspends the Google Workspace account, transfers Drive files to the manager, revokes OAuth tokens, and logs the offboarding event to BigQuery.
  tags:
  - identity
  - hr
  - google-workspace
  - google-drive
  - bigquery
capability:
  exposes:
  - type: mcp
    namespace: workspace-offboarding
    port: 8080
    tools:
    - name: offboard-user
      description: 'Orchestrate user offboarding: suspend account, transfer files, revoke tokens, and audit log.'
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The departing user's email address.
      - name: manager_email
        in: body
        type: string
        description: The manager's email to receive file transfer.
      - name: project_id
        in: body
        type: string
        description: GCP project for audit logging.
      steps:
      - name: suspend-user
        type: call
        call: workspace.update-user
        with:
          user_email: '{{user_email}}'
          suspended: true
      - name: transfer-drive
        type: call
        call: drive.transfer-ownership
        with:
          from_user: '{{user_email}}'
          to_user: '{{manager_email}}'
      - name: revoke-tokens
        type: call
        call: workspace.revoke-tokens
        with:
          user_email: '{{user_email}}'
      - name: log-offboarding
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: hr_events
          table_id: offboarding_log
          rows: '[{"user": "{{user_email}}", "manager": "{{manager_email}}", "action": "offboarded"}]'
  consumes:
  - type: http
    namespace: workspace
    baseUri: https://admin.googleapis.com/admin/directory/v1
    authentication:
      type: bearer
      token: $secrets.workspace_admin_token
    resources:
    - name: users
      path: /users/{{user_email}}
      inputParameters:
      - name: user_email
        in: path
      operations:
      - name: update-user
        method: PUT
      - name: revoke-tokens
        method: DELETE
  - type: http
    namespace: drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.workspace_admin_token
    resources:
    - name: transfers
      path: /files/transfer
      operations:
      - name: transfer-ownership
        method: POST
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → workspace-user-offboarding-pipeline.yml

Creates a Google Ads conversion action, generates the tracking tag, deploys it via Google Tag Manager, and confirms deployment by checking the GTM container version.

naftiko: '0.5'
info:
  label: Ads Conversion Tracking Setup
  description: Creates a Google Ads conversion action, generates the tracking tag, deploys it via Google Tag Manager, and confirms deployment by checking the GTM container version.
  tags:
  - advertising
  - marketing
  - google-ads
  - google-tag-manager
capability:
  exposes:
  - type: mcp
    namespace: ads-conversion-setup
    port: 8080
    tools:
    - name: setup-conversion-tracking
      description: Create a conversion action in Google Ads, deploy tracking tag via GTM, and verify.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Google Ads customer ID.
      - name: conversion_name
        in: body
        type: string
        description: The name for the conversion action.
      - name: conversion_category
        in: body
        type: string
        description: The conversion category (e.g. PURCHASE, LEAD).
      - name: gtm_account_id
        in: body
        type: string
        description: The GTM account ID.
      - name: gtm_container_id
        in: body
        type: string
        description: The GTM container ID.
      steps:
      - name: create-conversion
        type: call
        call: googleads.create-conversion-action
        with:
          customer_id: '{{customer_id}}'
          name: '{{conversion_name}}'
          category: '{{conversion_category}}'
      - name: create-gtm-tag
        type: call
        call: gtm.create-tag
        with:
          account_id: '{{gtm_account_id}}'
          container_id: '{{gtm_container_id}}'
          tag_name: '{{conversion_name}}_tracking'
          conversion_id: '{{create-conversion.results[0].conversionAction.id}}'
      - name: publish-container
        type: call
        call: gtm.publish-version
        with:
          account_id: '{{gtm_account_id}}'
          container_id: '{{gtm_container_id}}'
      - name: verify-deployment
        type: call
        call: gtm.get-latest-version
        with:
          account_id: '{{gtm_account_id}}'
          container_id: '{{gtm_container_id}}'
  consumes:
  - type: http
    namespace: googleads
    baseUri: https://googleads.googleapis.com/v16
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    inputParameters:
    - name: developer-token
      in: header
      value: $secrets.google_ads_developer_token
    resources:
    - name: conversion-actions
      path: /customers/{{customer_id}}/conversionActions:mutate
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: create-conversion-action
        method: POST
  - type: http
    namespace: gtm
    baseUri: https://tagmanager.googleapis.com/tagmanager/v2
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: tags
      path: /accounts/{{account_id}}/containers/{{container_id}}/workspaces/default/tags
      inputParameters:
      - name: account_id
        in: path
      - name: container_id
        in: path
      operations:
      - name: create-tag
        method: POST
    - name: versions
      path: /accounts/{{account_id}}/containers/{{container_id}}/versions
      inputParameters:
      - name: account_id
        in: path
      - name: container_id
        in: path
      operations:
      - name: publish-version
        method: POST
      - name: get-latest-version
        method: GET
Open in Framework → View in Fleet → ads-conversion-tracking-setup.yml

Lists all members of a Google Chat space.

naftiko: '0.5'
info:
  label: Google Chat Space Membership List
  description: Lists all members of a Google Chat space.
  tags:
  - communications
  - google-workspace
capability:
  exposes:
  - type: mcp
    namespace: googlechat
    port: 8080
    tools:
    - name: list-members
      description: List all members in a Google Chat space.
      inputParameters:
      - name: space
        in: body
        type: string
        description: The Google Chat space name.
      call: googlechat.list-members
      with:
        space: '{{space}}'
  consumes:
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: memberships
      path: /spaces/{{space}}/members
      inputParameters:
      - name: space
        in: path
      operations:
      - name: list-members
        method: GET
Open in Framework → View in Fleet → google-chat-space-membership-list.yml

Lists DNS records for a managed zone in Google Cloud DNS.

naftiko: '0.5'
info:
  label: Cloud DNS Zone Record Lookup
  description: Lists DNS records for a managed zone in Google Cloud DNS.
  tags:
  - networking
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: clouddns
    port: 8080
    tools:
    - name: list-records
      description: List DNS record sets for a managed zone.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: zone_name
        in: body
        type: string
        description: The managed zone name.
      call: clouddns.list-records
      with:
        project_id: '{{project_id}}'
        zone_name: '{{zone_name}}'
  consumes:
  - type: http
    namespace: clouddns
    baseUri: https://dns.googleapis.com/dns/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: records
      path: /projects/{{project_id}}/managedZones/{{zone_name}}/rrsets
      inputParameters:
      - name: project_id
        in: path
      - name: zone_name
        in: path
      operations:
      - name: list-records
        method: GET
Open in Framework → View in Fleet → cloud-dns-zone-record-lookup.yml

Extracts data from Cloud Storage, transforms it via a Dataflow template job, loads results into BigQuery, and notifies the data team in Google Chat.

naftiko: '0.5'
info:
  label: Data Pipeline ETL Orchestration
  description: Extracts data from Cloud Storage, transforms it via a Dataflow template job, loads results into BigQuery, and notifies the data team in Google Chat.
  tags:
  - data
  - etl
  - google-cloud-dataflow
  - bigquery
  - gcp-cloud-storage
capability:
  exposes:
  - type: mcp
    namespace: data-etl
    port: 8080
    tools:
    - name: run-etl-pipeline
      description: 'Orchestrate an ETL pipeline: extract from GCS, transform via Dataflow, load to BigQuery, and notify.'
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Dataflow region.
      - name: source_bucket
        in: body
        type: string
        description: The GCS bucket containing source data.
      - name: source_path
        in: body
        type: string
        description: The object path prefix in the source bucket.
      - name: bq_dataset
        in: body
        type: string
        description: The target BigQuery dataset.
      - name: bq_table
        in: body
        type: string
        description: The target BigQuery table.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for notifications.
      steps:
      - name: list-source-objects
        type: call
        call: cloudstorage.list-objects
        with:
          bucket_name: '{{source_bucket}}'
          prefix: '{{source_path}}'
      - name: launch-dataflow
        type: call
        call: dataflow.create-job-from-template
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          input_path: gs://{{source_bucket}}/{{source_path}}
          output_table: '{{project_id}}:{{bq_dataset}}.{{bq_table}}'
      - name: check-job
        type: call
        call: dataflow.get-job
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          job_id: '{{launch-dataflow.job.id}}'
      - name: notify-team
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'ETL pipeline complete. Job {{launch-dataflow.job.id}} status: {{check-job.currentState}}. Data loaded to {{bq_dataset}}.{{bq_table}}.'
  consumes:
  - type: http
    namespace: cloudstorage
    baseUri: https://storage.googleapis.com/storage/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: objects
      path: /b/{{bucket_name}}/o
      inputParameters:
      - name: bucket_name
        in: path
      - name: prefix
        in: query
      operations:
      - name: list-objects
        method: GET
  - type: http
    namespace: dataflow
    baseUri: https://dataflow.googleapis.com/v1b3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: templates
      path: /projects/{{project_id}}/locations/{{region}}/templates:launch
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      operations:
      - name: create-job-from-template
        method: POST
    - name: jobs
      path: /projects/{{project_id}}/locations/{{region}}/jobs/{{job_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: job_id
        in: path
      operations:
      - name: get-job
        method: GET
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → data-pipeline-etl-orchestration.yml

Accesses a secret version from Google Cloud Secret Manager.

naftiko: '0.5'
info:
  label: Secret Manager Secret Retrieval
  description: Accesses a secret version from Google Cloud Secret Manager.
  tags:
  - security
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: secretmanager
    port: 8080
    tools:
    - name: access-secret
      description: Access a specific version of a secret from Secret Manager.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: secret_id
        in: body
        type: string
        description: The secret identifier.
      - name: version
        in: body
        type: string
        description: The secret version number or latest.
      call: secretmanager.access-secret
      with:
        project_id: '{{project_id}}'
        secret_id: '{{secret_id}}'
        version: '{{version}}'
  consumes:
  - type: http
    namespace: secretmanager
    baseUri: https://secretmanager.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: secrets
      path: /projects/{{project_id}}/secrets/{{secret_id}}/versions/{{version}}:access
      inputParameters:
      - name: project_id
        in: path
      - name: secret_id
        in: path
      - name: version
        in: path
      operations:
      - name: access-secret
        method: GET
Open in Framework → View in Fleet → secret-manager-secret-retrieval.yml

Executes a saved Looker look by ID and returns the result set. Used by analytics teams to pull report data programmatically.

naftiko: '0.5'
info:
  label: Looker Dashboard Query
  description: Executes a saved Looker look by ID and returns the result set. Used by analytics teams to pull report data programmatically.
  tags:
  - analytics
  - bi
  - looker
capability:
  exposes:
  - type: mcp
    namespace: looker-analytics
    port: 8080
    tools:
    - name: run-look
      description: Execute a saved Looker look by look ID and return the result data.
      inputParameters:
      - name: look_id
        in: body
        type: string
        description: The Looker look identifier.
      - name: result_format
        in: body
        type: string
        description: 'Output format: json, csv, or txt.'
      call: looker.run-look
      with:
        look_id: '{{look_id}}'
        result_format: '{{result_format}}'
  consumes:
  - type: http
    namespace: looker
    baseUri: https://alphabet.cloud.looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_api_token
    resources:
    - name: looks
      path: /looks/{{look_id}}/run/{{result_format}}
      inputParameters:
      - name: look_id
        in: path
      - name: result_format
        in: path
      operations:
      - name: run-look
        method: GET
Open in Framework → View in Fleet → looker-dashboard-query.yml

Scans VPC firewall rules for overly permissive entries, logs findings to BigQuery, and alerts the security team via Google Chat with a summary of non-compliant rules.

naftiko: '0.5'
info:
  label: VPC Firewall Audit Pipeline
  description: Scans VPC firewall rules for overly permissive entries, logs findings to BigQuery, and alerts the security team via Google Chat with a summary of non-compliant rules.
  tags:
  - networking
  - security
  - vpc
  - bigquery
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: vpc-firewall-audit
    port: 8080
    tools:
    - name: audit-firewall-rules
      description: Scan VPC firewall rules, log findings to BigQuery, and alert security team.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: network_name
        in: body
        type: string
        description: The VPC network name to audit.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space for security alerts.
      steps:
      - name: list-rules
        type: call
        call: compute.list-firewalls
        with:
          project_id: '{{project_id}}'
          network_name: '{{network_name}}'
      - name: log-findings
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset_id: security_audits
          table_id: firewall_findings
          rows: '{{list-rules.items}}'
      - name: alert-team
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Firewall audit for {{network_name}}: {{list-rules.items.length}} rules found. Review findings in BigQuery security_audits.firewall_findings.'
  consumes:
  - type: http
    namespace: compute
    baseUri: https://compute.googleapis.com/compute/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: firewalls
      path: /projects/{{project_id}}/global/firewalls
      inputParameters:
      - name: project_id
        in: path
      - name: filter
        in: query
      operations:
      - name: list-firewalls
        method: GET
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vpc-firewall-audit-pipeline.yml

Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders.

naftiko: '0.5'
info:
  label: Cost Center Budget Tracking Pipeline
  description: Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders.
  tags:
  - finance
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: cost_center_budget_tracking
      description: Orchestrate cost center budget tracking 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-powerbi
        type: call
        call: powerbi.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Cost Center Budget Tracking Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://alphabet.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: 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: powerbi-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 → cost-center-budget-tracking-pipeline.yml

Checks a Vertex AI endpoint's deployment status, model version, and traffic split. Used by ML engineers to verify model serving readiness.

naftiko: '0.5'
info:
  label: Vertex AI Model Endpoint Health
  description: Checks a Vertex AI endpoint's deployment status, model version, and traffic split. Used by ML engineers to verify model serving readiness.
  tags:
  - ai
  - machine-learning
  - vertex-ai
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: vertex-ml
    port: 8080
    tools:
    - name: get-endpoint-health
      description: Retrieve Vertex AI endpoint deployment info by project, region, and endpoint ID.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Vertex AI region.
      - name: endpoint_id
        in: body
        type: string
        description: The Vertex AI endpoint identifier.
      call: vertexai.get-endpoint
      with:
        project_id: '{{project_id}}'
        region: '{{region}}'
        endpoint_id: '{{endpoint_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.displayName
      - name: deployed_models
        type: number
        mapping: $.deployedModels.length
      - name: traffic_split
        type: string
        mapping: $.trafficSplit
  consumes:
  - type: http
    namespace: vertexai
    baseUri: https://us-central1-aiplatform.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: endpoints
      path: /projects/{{project_id}}/locations/{{region}}/endpoints/{{endpoint_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: endpoint_id
        in: path
      operations:
      - name: get-endpoint
        method: GET
Open in Framework → View in Fleet → vertex-ai-model-endpoint-health.yml

Runs test cases against a Dialogflow CX agent, collects results, logs failures to Jira, and sends a summary to Google Chat.

naftiko: '0.5'
info:
  label: Dialogflow CX Agent Test Pipeline
  description: Runs test cases against a Dialogflow CX agent, collects results, logs failures to Jira, and sends a summary to Google Chat.
  tags:
  - ai
  - google-dialogflow
  - jira
  - google-workspace
capability:
  exposes:
  - type: mcp
    namespace: dfcx-test
    port: 8080
    tools:
    - name: run-agent-tests
      description: Execute Dialogflow CX test cases and report failures.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: GCP project ID.
      - name: region
        in: body
        type: string
        description: Dialogflow region.
      - name: agent_id
        in: body
        type: string
        description: Dialogflow CX agent ID.
      - name: jira_domain
        in: body
        type: string
        description: Jira domain.
      - name: jira_project
        in: body
        type: string
        description: Jira project key.
      - name: chat_space
        in: body
        type: string
        description: Google Chat space.
      steps:
      - name: run-tests
        type: call
        call: dialogflowcx.batch-run-tests
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          agent_id: '{{agent_id}}'
      - name: log-failures
        type: call
        call: jira.create-issue
        with:
          project: '{{jira_project}}'
          summary: Dialogflow CX test failures
          description: '{{run-tests.results}}'
      - name: notify
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: Dialogflow CX test run complete. Failures logged to Jira.
  consumes:
  - type: http
    namespace: dialogflowcx
    baseUri: https://dialogflow.googleapis.com/v3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: testCases
      path: /projects/{{project_id}}/locations/{{region}}/agents/{{agent_id}}/testCases:batchRun
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: agent_id
        in: path
      operations:
      - name: batch-run-tests
        method: POST
  - type: http
    namespace: jira
    baseUri: https://{{jira_domain}}.atlassian.net/rest/api/3
    authentication:
      type: basic
      token: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → dialogflow-cx-agent-test-pipeline.yml

Detects failed Airflow DAGs in Cloud Composer, restarts the tasks, logs to Cloud Logging, and notifies the data engineering team.

naftiko: '0.5'
info:
  label: Cloud Composer DAG Failure Recovery Pipeline
  description: Detects failed Airflow DAGs in Cloud Composer, restarts the tasks, logs to Cloud Logging, and notifies the data engineering team.
  tags:
  - data
  - google-cloud-platform
  - apache-airflow
capability:
  exposes:
  - type: mcp
    namespace: composer-recovery
    port: 8080
    tools:
    - name: run-dag-recovery
      description: Detect and recover failed DAGs in Cloud Composer.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: region
        in: body
        type: string
        description: The Composer region.
      - name: environment
        in: body
        type: string
        description: Cloud Composer environment name.
      - name: dag_id
        in: body
        type: string
        description: The Airflow DAG ID.
      - name: airflow_uri
        in: body
        type: string
        description: The Airflow webserver URI.
      steps:
      - name: check-environment
        type: call
        call: composer.get-environment
        with:
          project_id: '{{project_id}}'
          region: '{{region}}'
          environment: '{{environment}}'
      - name: list-failed-runs
        type: call
        call: airflow.list-runs
        with:
          dag_id: '{{dag_id}}'
      - name: restart-dag
        type: call
        call: airflow.trigger-run
        with:
          dag_id: '{{dag_id}}'
      - name: log-recovery
        type: call
        call: cloudlogging.write-entry
        with:
          logName: projects/{{project_id}}/logs/dag-recovery
          entry: Restarted DAG {{dag_id}} after failure.
  consumes:
  - type: http
    namespace: composer
    baseUri: https://composer.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: environments
      path: /projects/{{project_id}}/locations/{{region}}/environments/{{environment}}
      inputParameters:
      - name: project_id
        in: path
      - name: region
        in: path
      - name: environment
        in: path
      operations:
      - name: get-environment
        method: GET
  - type: http
    namespace: airflow
    baseUri: https://{{airflow_uri}}
    authentication:
      type: bearer
      token: $secrets.airflow_token
    resources:
    - name: dags
      path: /api/v1/dags/{{dag_id}}/dagRuns
      inputParameters:
      - name: dag_id
        in: path
      operations:
      - name: list-runs
        method: GET
      - name: trigger-run
        method: POST
  - type: http
    namespace: cloudlogging
    baseUri: https://logging.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: entries
      path: /entries:write
      operations:
      - name: write-entry
        method: POST
Open in Framework → View in Fleet → cloud-composer-dag-failure-recovery-pipeline.yml

Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.

naftiko: '0.5'
info:
  label: Infrastructure Drift Detection Pipeline
  description: Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.
  tags:
  - devops
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: infrastructure_drift_detection
      description: Orchestrate infrastructure drift detection pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-github
        type: call
        call: github.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-github.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Infrastructure Drift Detection Pipeline step 3 complete.
  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-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://alphabet.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 → infrastructure-drift-detection-pipeline.yml

On a Cloud Monitoring alert, creates a PagerDuty incident, opens a Google Chat war room, queries recent Cloud Logging entries, and posts a summary to the war room.

naftiko: '0.5'
info:
  label: Incident Response Orchestrator
  description: On a Cloud Monitoring alert, creates a PagerDuty incident, opens a Google Chat war room, queries recent Cloud Logging entries, and posts a summary to the war room.
  tags:
  - operations
  - incident-management
  - cloud-monitoring
  - google-cloud-platform
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: trigger-incident-response
      description: Orchestrate incident response across monitoring, logging, PagerDuty, and Google Chat.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project with the alert.
      - name: alert_policy_name
        in: body
        type: string
        description: The Cloud Monitoring alert policy resource name.
      - name: service_name
        in: body
        type: string
        description: The affected service name for context.
      - name: pagerduty_service_id
        in: body
        type: string
        description: The PagerDuty service ID to create the incident in.
      - name: chat_space
        in: body
        type: string
        description: The Google Chat space for the war room.
      steps:
      - name: get-alert
        type: call
        call: monitoring.get-alert-policy
        with:
          alert_policy_name: '{{alert_policy_name}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          service_id: '{{pagerduty_service_id}}'
          title: 'Alert fired: {{get-alert.displayName}} on {{service_name}}'
          urgency: high
      - name: fetch-logs
        type: call
        call: logging.list-entries
        with:
          project_id: '{{project_id}}'
          filter: resource.labels.service_name={{service_name}} severity>=ERROR
      - name: post-summary
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Incident {{create-incident.incident.id}}: {{get-alert.displayName}}. PagerDuty: {{create-incident.incident.html_url}}. Recent errors: {{fetch-logs.entries.length}} entries.'
  consumes:
  - type: http
    namespace: monitoring
    baseUri: https://monitoring.googleapis.com/v3
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: alert-policies
      path: /{{alert_policy_name}}
      inputParameters:
      - name: alert_policy_name
        in: path
      operations:
      - name: get-alert-policy
        method: GET
  - 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: logging
    baseUri: https://logging.googleapis.com/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: entries
      path: /entries:list
      operations:
      - name: list-entries
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → incident-response-orchestrator.yml

Publishes a message to a Google Cloud Pub/Sub topic.

naftiko: '0.5'
info:
  label: Cloud Pub/Sub Topic Message Publisher
  description: Publishes a message to a Google Cloud Pub/Sub topic.
  tags:
  - messaging
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: pubsub
    port: 8080
    tools:
    - name: publish-message
      description: Publish a message to a Pub/Sub topic.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: topic_name
        in: body
        type: string
        description: The Pub/Sub topic name.
      - name: message_data
        in: body
        type: string
        description: The base64-encoded message data.
      call: pubsub.publish-message
      with:
        project_id: '{{project_id}}'
        topic_name: '{{topic_name}}'
        data: '{{message_data}}'
  consumes:
  - type: http
    namespace: pubsub
    baseUri: https://pubsub.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: topics
      path: /projects/{{project_id}}/topics/{{topic_name}}:publish
      inputParameters:
      - name: project_id
        in: path
      - name: topic_name
        in: path
      operations:
      - name: publish-message
        method: POST
Open in Framework → View in Fleet → cloud-pub-sub-topic-message-publisher.yml

Pulls YouTube channel stats and recent video analytics, exports the data to a Google Sheet dashboard, and sends a weekly content digest via Gmail.

naftiko: '0.5'
info:
  label: YouTube Content Performance Pipeline
  description: Pulls YouTube channel stats and recent video analytics, exports the data to a Google Sheet dashboard, and sends a weekly content digest via Gmail.
  tags:
  - media
  - analytics
  - youtube
  - google-sheets
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: youtube-performance
    port: 8080
    tools:
    - name: generate-content-report
      description: Fetch YouTube channel and video stats, export to Sheets, and email digest.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The YouTube channel ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID for the dashboard.
      - name: report_email
        in: body
        type: string
        description: Email for the content performance digest.
      steps:
      - name: get-channel-stats
        type: call
        call: youtube.get-channel
        with:
          channel_id: '{{channel_id}}'
      - name: get-recent-videos
        type: call
        call: youtube.list-videos
        with:
          channel_id: '{{channel_id}}'
      - name: update-dashboard
        type: call
        call: sheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: YouTubeReport!A1
          values: '{{get-recent-videos.items}}'
      - name: send-digest
        type: call
        call: gmail.send-message
        with:
          to: '{{report_email}}'
          subject: YouTube Content Digest
          body: 'Channel subscribers: {{get-channel-stats.items[0].statistics.subscriberCount}}. Total views: {{get-channel-stats.items[0].statistics.viewCount}}. Dashboard: https://docs.google.com/spreadsheets/d/{{spreadsheet_id}}.'
  consumes:
  - type: http
    namespace: youtube
    baseUri: https://www.googleapis.com/youtube/v3
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: channels
      path: /channels
      inputParameters:
      - name: id
        in: query
      - name: part
        in: query
        value: statistics
      operations:
      - name: get-channel
        method: GET
    - name: search
      path: /search
      inputParameters:
      - name: channelId
        in: query
      - name: order
        in: query
        value: date
      - name: type
        in: query
        value: video
      operations:
      - name: list-videos
        method: GET
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → youtube-content-performance-pipeline.yml

Retrieves metadata for a file stored in Google Drive including permissions and sharing status.

naftiko: '0.5'
info:
  label: Google Drive File Metadata Lookup
  description: Retrieves metadata for a file stored in Google Drive including permissions and sharing status.
  tags:
  - collaboration
  - google-drive
capability:
  exposes:
  - type: mcp
    namespace: googledrive
    port: 8080
    tools:
    - name: get-file
      description: Retrieve metadata for a Google Drive file.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Google Drive file ID.
      call: googledrive.get-file
      with:
        file_id: '{{file_id}}'
  consumes:
  - type: http
    namespace: googledrive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_drive_token
    resources:
    - name: files
      path: /files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → google-drive-file-metadata-lookup.yml

Extracts API traffic analytics from Apigee, transforms the data, loads into BigQuery, and refreshes a Looker dashboard.

naftiko: '0.5'
info:
  label: Apigee API Analytics to Looker Pipeline
  description: Extracts API traffic analytics from Apigee, transforms the data, loads into BigQuery, and refreshes a Looker dashboard.
  tags:
  - analytics
  - apigee
  - bigquery
  - looker
capability:
  exposes:
  - type: mcp
    namespace: apigee-analytics
    port: 8080
    tools:
    - name: run-apigee-analytics
      description: Extract Apigee analytics and load into BigQuery with Looker refresh.
      inputParameters:
      - name: org
        in: body
        type: string
        description: Apigee organization name.
      - name: env
        in: body
        type: string
        description: Apigee environment.
      - name: project_id
        in: body
        type: string
        description: GCP project ID.
      - name: dataset
        in: body
        type: string
        description: BigQuery dataset.
      - name: table
        in: body
        type: string
        description: BigQuery table.
      steps:
      - name: get-api-stats
        type: call
        call: apigee.get-stats
        with:
          org: '{{org}}'
          env: '{{env}}'
      - name: load-to-bq
        type: call
        call: bigquery.insert-rows
        with:
          project_id: '{{project_id}}'
          dataset: '{{dataset}}'
          table: '{{table}}'
      - name: refresh-looker
        type: call
        call: looker.run-look
        with:
          look_id: '{{look_id}}'
  consumes:
  - type: http
    namespace: apigee
    baseUri: https://apigee.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: stats
      path: /organizations/{{org}}/environments/{{env}}/stats/apiproxy
      inputParameters:
      - name: org
        in: path
      - name: env
        in: path
      operations:
      - name: get-stats
        method: GET
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset}}/tables/{{table}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset
        in: path
      - name: table
        in: path
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: looker
    baseUri: https://looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_api_token
    resources:
    - name: looks
      path: /looks/{{look_id}}/run/json
      inputParameters:
      - name: look_id
        in: path
      operations:
      - name: run-look
        method: GET
Open in Framework → View in Fleet → apigee-api-analytics-to-looker-pipeline.yml

When a Google Ads campaign exceeds its daily budget threshold, pauses the campaign, sends an alert to the marketing Slack channel via Google Chat, and logs the event to BigQuery.

naftiko: '0.5'
info:
  label: Ad Campaign Budget Adjustment Pipeline
  description: When a Google Ads campaign exceeds its daily budget threshold, pauses the campaign, sends an alert to the marketing Slack channel via Google Chat, and logs the event to BigQuery.
  tags:
  - advertising
  - marketing
  - google-ads
  - bigquery
  - alerting
capability:
  exposes:
  - type: mcp
    namespace: ads-budget-control
    port: 8080
    tools:
    - name: enforce-budget-limit
      description: Check campaign spend against threshold, pause if exceeded, alert team, and log to BigQuery.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Google Ads customer ID.
      - name: campaign_id
        in: body
        type: string
        description: The campaign identifier.
      - name: budget_threshold
        in: body
        type: number
        description: The daily budget ceiling in micros.
      - name: chat_space
        in: body
        type: string
        description: The Google Chat space ID for alerts.
      steps:
      - name: get-spend
        type: call
        call: googleads.query-campaign
        with:
          customer_id: '{{customer_id}}'
          campaign_id: '{{campaign_id}}'
      - name: pause-campaign
        type: call
        call: googleads.update-campaign-status
        with:
          customer_id: '{{customer_id}}'
          campaign_id: '{{campaign_id}}'
          status: PAUSED
      - name: alert-team
        type: call
        call: googlechat.send-message
        with:
          space: '{{chat_space}}'
          text: 'Budget alert: Campaign {{campaign_id}} paused. Spend {{get-spend.cost_micros}} exceeded threshold {{budget_threshold}}.'
      - name: log-event
        type: call
        call: bigquery.insert-rows
        with:
          project_id: alphabet-ads-ops
          dataset_id: budget_events
          table_id: campaign_pauses
          rows: '[{"campaign_id": "{{campaign_id}}", "spend": "{{get-spend.cost_micros}}", "threshold": "{{budget_threshold}}"}]'
  consumes:
  - type: http
    namespace: googleads
    baseUri: https://googleads.googleapis.com/v16
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    inputParameters:
    - name: developer-token
      in: header
      value: $secrets.google_ads_developer_token
    resources:
    - name: campaign-query
      path: /customers/{{customer_id}}/googleAds:searchStream
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: query-campaign
        method: POST
    - name: campaign-mutate
      path: /customers/{{customer_id}}/campaigns:mutate
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: update-campaign-status
        method: POST
  - type: http
    namespace: googlechat
    baseUri: https://chat.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_chat_token
    resources:
    - name: messages
      path: /spaces/{{space}}/messages
      inputParameters:
      - name: space
        in: path
      operations:
      - name: send-message
        method: POST
  - type: http
    namespace: bigquery
    baseUri: https://bigquery.googleapis.com/bigquery/v2
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: tabledata
      path: /projects/{{project_id}}/datasets/{{dataset_id}}/tables/{{table_id}}/insertAll
      inputParameters:
      - name: project_id
        in: path
      - name: dataset_id
        in: path
      - name: table_id
        in: path
      operations:
      - name: insert-rows
        method: POST
Open in Framework → View in Fleet → ad-campaign-budget-adjustment-pipeline.yml

Extracts structured data from a Google Doc, parses key-value pairs, appends them to a Google Sheet, and sends a confirmation via Gmail.

naftiko: '0.5'
info:
  label: Google Docs to Sheets Data Sync
  description: Extracts structured data from a Google Doc, parses key-value pairs, appends them to a Google Sheet, and sends a confirmation via Gmail.
  tags:
  - productivity
  - google-docs
  - google-sheets
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: docs-to-sheets
    port: 8080
    tools:
    - name: sync-doc-to-sheet
      description: Extract data from a Google Doc and append to a Google Sheet with email confirmation.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Google Docs document ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      - name: sheet_range
        in: body
        type: string
        description: The target sheet range (e.g. Sheet1!A1).
      - name: notify_email
        in: body
        type: string
        description: Email address for sync confirmation.
      steps:
      - name: get-doc-content
        type: call
        call: docs.get-document
        with:
          document_id: '{{document_id}}'
      - name: append-to-sheet
        type: call
        call: sheets.append-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: '{{sheet_range}}'
          values: '{{get-doc-content.body.content}}'
      - name: send-confirmation
        type: call
        call: gmail.send-message
        with:
          to: '{{notify_email}}'
          subject: Doc-to-Sheet sync complete
          body: 'Data from document {{document_id}} has been synced to spreadsheet {{spreadsheet_id}} at range {{sheet_range}}. Rows appended: {{append-to-sheet.updates.updatedRows}}.'
  consumes:
  - type: http
    namespace: docs
    baseUri: https://docs.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: documents
      path: /documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-values
        method: POST
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-docs-to-sheets-data-sync.yml

Creates a new Google Slides presentation from a template, populates it with data from a Google Sheet, and shares it via Google Drive with email notification.

naftiko: '0.5'
info:
  label: Google Slides Presentation Generator
  description: Creates a new Google Slides presentation from a template, populates it with data from a Google Sheet, and shares it via Google Drive with email notification.
  tags:
  - productivity
  - google-slides
  - google-sheets
  - google-drive
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: slides-generator
    port: 8080
    tools:
    - name: generate-presentation
      description: Create a Slides deck from a template, fill with Sheets data, share via Drive, and notify.
      inputParameters:
      - name: template_presentation_id
        in: body
        type: string
        description: The Slides template presentation ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: The source Google Sheets spreadsheet ID.
      - name: sheet_range
        in: body
        type: string
        description: The data range to pull from the spreadsheet.
      - name: share_email
        in: body
        type: string
        description: Email address to share the generated presentation with.
      steps:
      - name: copy-template
        type: call
        call: drive.copy-file
        with:
          file_id: '{{template_presentation_id}}'
          name: Generated Report
      - name: get-sheet-data
        type: call
        call: sheets.get-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: '{{sheet_range}}'
      - name: update-slides
        type: call
        call: slides.batch-update
        with:
          presentation_id: '{{copy-template.id}}'
          data: '{{get-sheet-data.values}}'
      - name: share-presentation
        type: call
        call: drive.share-file
        with:
          file_id: '{{copy-template.id}}'
          email: '{{share_email}}'
          role: reader
      - name: notify-recipient
        type: call
        call: gmail.send-message
        with:
          to: '{{share_email}}'
          subject: New presentation ready
          body: 'Your generated presentation is ready: https://docs.google.com/presentation/d/{{copy-template.id}}'
  consumes:
  - type: http
    namespace: drive
    baseUri: https://www.googleapis.com/drive/v3
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: files
      path: /files/{{file_id}}/copy
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: copy-file
        method: POST
    - name: permissions
      path: /files/{{file_id}}/permissions
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: share-file
        method: POST
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_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: slides
    baseUri: https://slides.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: presentations
      path: /presentations/{{presentation_id}}:batchUpdate
      inputParameters:
      - name: presentation_id
        in: path
      operations:
      - name: batch-update
        method: POST
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-slides-presentation-generator.yml

Fetches responses from a Google Form, aggregates summary statistics, writes them to a Google Sheet, and sends the report via Gmail.

naftiko: '0.5'
info:
  label: Google Forms Response Aggregator
  description: Fetches responses from a Google Form, aggregates summary statistics, writes them to a Google Sheet, and sends the report via Gmail.
  tags:
  - productivity
  - google-forms
  - google-sheets
  - gmail
capability:
  exposes:
  - type: mcp
    namespace: forms-aggregation
    port: 8080
    tools:
    - name: aggregate-form-responses
      description: Collect Google Forms responses, summarize, push to Sheets, and email report.
      inputParameters:
      - name: form_id
        in: body
        type: string
        description: The Google Form ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: The target Google Sheets spreadsheet ID.
      - name: sheet_range
        in: body
        type: string
        description: The target range in the spreadsheet.
      - name: report_email
        in: body
        type: string
        description: Email to send the aggregated report.
      steps:
      - name: get-responses
        type: call
        call: forms.list-responses
        with:
          form_id: '{{form_id}}'
      - name: write-to-sheet
        type: call
        call: sheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: '{{sheet_range}}'
          values: '{{get-responses.responses}}'
      - name: send-report
        type: call
        call: gmail.send-message
        with:
          to: '{{report_email}}'
          subject: Form Responses Report for {{form_id}}
          body: 'Total responses: {{get-responses.responses.length}}. Data written to spreadsheet {{spreadsheet_id}}.'
  consumes:
  - type: http
    namespace: forms
    baseUri: https://forms.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: responses
      path: /forms/{{form_id}}/responses
      inputParameters:
      - name: form_id
        in: path
      operations:
      - name: list-responses
        method: GET
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: values
      path: /spreadsheets/{{spreadsheet_id}}/values/{{range}}
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: update-values
        method: PUT
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.google_oauth_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-forms-response-aggregator.yml

Searches application logs for matching patterns. Used by Alphabet teams.

naftiko: '0.5'
info:
  label: Alphabet Log Search Query
  description: Searches application logs for matching patterns. Used by Alphabet teams.
  tags:
  - cloud
  - kubernetes
capability:
  exposes:
  - type: mcp
    namespace: kubernetes
    port: 8080
    tools:
    - name: get-log_search_query
      description: Searches application logs for matching patterns. Used by Alphabet teams.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search_query to look up.
      call: kubernetes.get-search_query
      with:
        search_query: '{{search_query}}'
  consumes:
  - type: http
    namespace: k8s
    baseUri: https://alphabet-k8s.com/api/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: alphabet_log_search_query
        method: GET
Open in Framework → View in Fleet → alphabet-log-search-query.yml

Retrieves the node pool configuration and status for a GKE cluster including node count, machine type, and autoscaling settings.

naftiko: '0.5'
info:
  label: GKE Cluster Node Pool Status
  description: Retrieves the node pool configuration and status for a GKE cluster including node count, machine type, and autoscaling settings.
  tags:
  - infrastructure
  - kubernetes
  - gke
  - google-cloud-platform
capability:
  exposes:
  - type: mcp
    namespace: gke-ops
    port: 8080
    tools:
    - name: get-nodepool-status
      description: Fetch GKE node pool details by cluster name, zone, and node pool name.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GCP project ID.
      - name: zone
        in: body
        type: string
        description: The GKE cluster zone.
      - name: cluster_name
        in: body
        type: string
        description: The GKE cluster name.
      - name: nodepool_name
        in: body
        type: string
        description: The node pool name.
      call: gke.get-nodepool
      with:
        project_id: '{{project_id}}'
        zone: '{{zone}}'
        cluster_name: '{{cluster_name}}'
        nodepool_name: '{{nodepool_name}}'
      outputParameters:
      - name: node_count
        type: number
        mapping: $.initialNodeCount
      - name: machine_type
        type: string
        mapping: $.config.machineType
      - name: autoscaling_enabled
        type: boolean
        mapping: $.autoscaling.enabled
  consumes:
  - type: http
    namespace: gke
    baseUri: https://container.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: nodepools
      path: /projects/{{project_id}}/zones/{{zone}}/clusters/{{cluster_name}}/nodePools/{{nodepool_name}}
      inputParameters:
      - name: project_id
        in: path
      - name: zone
        in: path
      - name: cluster_name
        in: path
      - name: nodepool_name
        in: path
      operations:
      - name: get-nodepool
        method: GET
Open in Framework → View in Fleet → gke-cluster-node-pool-status.yml

Tracks fleet vehicle positions via Google Maps Routes API, updates a Cloud Firestore collection, and sends delay alerts to Microsoft Teams.

naftiko: '0.5'
info:
  label: Google Maps Fleet Tracking Pipeline
  description: Tracks fleet vehicle positions via Google Maps Routes API, updates a Cloud Firestore collection, and sends delay alerts to Microsoft Teams.
  tags:
  - logistics
  - google-maps
  - google-cloud-platform
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: fleet-tracking
    port: 8080
    tools:
    - name: run-fleet-tracking
      description: Track fleet positions and notify on delays.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: GCP project ID.
      - name: collection
        in: body
        type: string
        description: Firestore collection.
      - name: origins
        in: body
        type: string
        description: Origin addresses.
      - name: destinations
        in: body
        type: string
        description: Destination addresses.
      - name: team_id
        in: body
        type: string
        description: Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: Teams channel ID.
      steps:
      - name: compute-distances
        type: call
        call: routes.compute-matrix
        with:
          origins: '{{origins}}'
          destinations: '{{destinations}}'
      - name: update-firestore
        type: call
        call: firestore.create-document
        with:
          project_id: '{{project_id}}'
          collection: '{{collection}}'
      - name: alert-delays
        type: call
        call: teams.send-message
        with:
          team_id: '{{team_id}}'
          channel_id: '{{channel_id}}'
          text: Fleet tracking update complete.
  consumes:
  - type: http
    namespace: routes
    baseUri: https://routes.googleapis.com/distanceMatrix/v2
    authentication:
      type: bearer
      token: $secrets.google_maps_key
    resources:
    - name: distanceMatrix
      path: /distanceMatrix:compute
      operations:
      - name: compute-matrix
        method: POST
  - type: http
    namespace: firestore
    baseUri: https://firestore.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_access_token
    resources:
    - name: documents
      path: /projects/{{project_id}}/databases/(default)/documents/{{collection}}
      inputParameters:
      - name: project_id
        in: path
      - name: collection
        in: path
      operations:
      - name: create-document
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: 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 → google-maps-fleet-tracking-pipeline.yml

Lists all Lambda functions in a given AWS region and returns their names, runtimes, and memory configurations.

naftiko: '0.5'
info:
  label: Lambda Function List
  description: Lists all Lambda functions in a given AWS region and returns their names, runtimes, and memory configurations.
  tags:
  - cloud
  - serverless
  - aws
  - lambda
capability:
  exposes:
  - type: mcp
    namespace: lambda-list
    port: 8080
    tools:
    - name: list-functions
      description: List all Lambda functions in the specified AWS region. Returns function names, runtimes, and memory sizes.
      inputParameters:
      - name: region
        in: body
        type: string
        description: The AWS region to list Lambda functions for, e.g. us-west-2.
      call: lambda-api.list-functions
      with:
        region: '{{region}}'
      outputParameters:
      - name: functions
        type: array
        mapping: $.Functions
  consumes:
  - namespace: lambda-api
    type: http
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_lambda_token
      placement: header
    resources:
    - name: functions
      path: /functions
      inputParameters:
      - name: region
        in: query
      operations:
      - name: list-functions
        method: GET
Open in Framework → View in Fleet → lambda-function-list.yml

Aggregates GitHub PR merge rates, Jira issue cycle times, and Datadog error rates for the past week, then publishes a consolidated engineering health digest to the leadership Slack channel.

naftiko: '0.5'
info:
  label: Weekly Engineering Metrics Digest
  description: Aggregates GitHub PR merge rates, Jira issue cycle times, and Datadog error rates for the past week, then publishes a consolidated engineering health digest to the leadership Slack channel.
  tags:
  - devops
  - reporting
  - github
  - jira
  - datadog
  - slack
  - metrics
capability:
  exposes:
  - type: mcp
    namespace: eng-reporting
    port: 8080
    tools:
    - name: publish-eng-metrics-digest
      description: Given a GitHub org, Jira project key, and Datadog service tag, fetch the weekly PR merge count, Jira throughput, and service error rate, then post a combined engineering digest to Slack.
      inputParameters:
      - name: github_org
        in: body
        type: string
        description: The GitHub organization to query PR merge stats for, e.g. amzn.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key to query issue throughput for.
      - name: datadog_service
        in: body
        type: string
        description: The Datadog service tag to query error rate metrics for.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID where the weekly digest will be posted.
      steps:
      - name: get-pr-stats
        type: call
        call: github-metrics.search-issues
        with:
          q: org:{{github_org}} is:pr is:merged merged:>-7d
      - name: get-dd-error-rate
        type: call
        call: datadog-metrics.query-metrics
        with:
          query: avg:trace.web.request.errors{service:{{datadog_service}}}.rollup(avg, 604800)
      - name: post-digest
        type: call
        call: slack-metrics.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Weekly Engineering Digest | PRs merged: {{get-pr-stats.total_count}} | Datadog error rate (7d avg): {{get-dd-error-rate.value}} | Project: {{jira_project_key}}'
  consumes:
  - namespace: github-metrics
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: search-issues
      path: /search/issues
      inputParameters:
      - name: q
        in: query
      operations:
      - name: search-issues
        method: GET
  - namespace: datadog-metrics
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - namespace: slack-metrics
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → weekly-engineering-metrics-digest.yml

When a Salesforce support case is escalated to priority 1, creates a linked ServiceNow incident and pages the on-call support engineer via PagerDuty.

naftiko: '0.5'
info:
  label: Salesforce Case Escalation to ServiceNow
  description: When a Salesforce support case is escalated to priority 1, creates a linked ServiceNow incident and pages the on-call support engineer via PagerDuty.
  tags:
  - customer-support
  - crm
  - salesforce
  - servicenow
  - pagerduty
  - escalation
capability:
  exposes:
  - type: mcp
    namespace: support-escalation
    port: 8080
    tools:
    - name: escalate-case-to-p1
      description: Given a Salesforce case ID and PagerDuty service key, fetch the case details, open a linked ServiceNow incident, and page the on-call support engineer.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case ID to escalate, e.g. 5005g00000ABC.
      - name: pagerduty_service_key
        in: body
        type: string
        description: The PagerDuty service integration key for routing the escalation page.
      steps:
      - name: get-case
        type: call
        call: salesforce-esc.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-incident
        type: call
        call: servicenow-esc.create-incident
        with:
          short_description: 'P1 Escalation: {{get-case.subject}}'
          description: 'Salesforce Case: {{case_id}}

            Account: {{get-case.account_name}}

            Description: {{get-case.description}}'
          urgency: '1'
          impact: '1'
      - name: page-oncall
        type: call
        call: pagerduty-esc.create-incident
        with:
          service_key: '{{pagerduty_service_key}}'
          description: 'P1 support escalation: {{get-case.subject}}'
          incident_key: sf-{{case_id}}
  consumes:
  - namespace: salesforce-esc
    type: http
    baseUri: https://amazon.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: case
      path: /sobjects/Case/{case_id}
      inputParameters:
      - name: case_id
        in: path
      operations:
      - name: get-case
        method: GET
  - namespace: servicenow-esc
    type: http
    baseUri: https://amazon.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: pagerduty-esc
    type: http
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incident
      path: /enqueue
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → salesforce-case-escalation-to-servicenow.yml

Retrieves a single item from a DynamoDB table by primary key and returns the full item attributes.

naftiko: '0.5'
info:
  label: DynamoDB Item Lookup
  description: Retrieves a single item from a DynamoDB table by primary key and returns the full item attributes.
  tags:
  - cloud
  - database
  - aws
  - dynamodb
capability:
  exposes:
  - type: mcp
    namespace: dynamo-lookup
    port: 8080
    tools:
    - name: get-item
      description: Fetch a single item from a DynamoDB table by its primary key. Returns all item attributes.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: The DynamoDB table name to query.
      - name: key_value
        in: body
        type: string
        description: The primary key value for the item to retrieve.
      call: dynamodb-api.get-item
      with:
        table_name: '{{table_name}}'
        key_value: '{{key_value}}'
      outputParameters:
      - name: item
        type: object
        mapping: $.Item
  consumes:
  - namespace: dynamodb-api
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      inputParameters:
      - name: table_name
        in: body
      - name: key_value
        in: body
      operations:
      - name: get-item
        method: POST
Open in Framework → View in Fleet → dynamodb-item-lookup.yml

Fetches an open Workday job requisition and publishes it as a LinkedIn job posting, then creates a Jira recruiting task to track the open role.

naftiko: '0.5'
info:
  label: LinkedIn Job Posting Publisher
  description: Fetches an open Workday job requisition and publishes it as a LinkedIn job posting, then creates a Jira recruiting task to track the open role.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
  - jira
capability:
  exposes:
  - type: mcp
    namespace: recruiting-ops
    port: 8080
    tools:
    - name: publish-job-to-linkedin
      description: Given a Workday job requisition ID, fetch role details from Workday, publish the posting to LinkedIn, and create a Jira recruiting task to track candidate pipeline.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID to publish, e.g. JR-00542.
      - name: linkedin_organization_id
        in: body
        type: string
        description: The LinkedIn organization URN ID to post the job under.
      steps:
      - name: get-requisition
        type: call
        call: workday-rec.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: create-linkedin-post
        type: call
        call: linkedin.create-job-posting
        with:
          organization_id: '{{linkedin_organization_id}}'
          title: '{{get-requisition.job_title}}'
          description: '{{get-requisition.job_description}}'
          location: '{{get-requisition.location}}'
      - name: create-recruiting-task
        type: call
        call: jira-rec.create-issue
        with:
          project_key: RECRUIT
          issuetype: Task
          summary: 'Open Role: {{get-requisition.job_title}} ({{requisition_id}})'
          description: 'LinkedIn posting ID: {{create-linkedin-post.posting_id}}'
  consumes:
  - namespace: workday-rec
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisition
      path: /jobRequisitions/{requisition_id}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - namespace: linkedin
    type: http
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: job-posting
      path: /jobs
      operations:
      - name: create-job-posting
        method: POST
  - namespace: jira-rec
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → linkedin-job-posting-publisher.yml

Fetches current headcount data from Workday by department and publishes a summary report to a Slack channel for people-ops review.

naftiko: '0.5'
info:
  label: Workday Headcount Snapshot
  description: Fetches current headcount data from Workday by department and publishes a summary report to a Slack channel for people-ops review.
  tags:
  - hr
  - reporting
  - workday
  - slack
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: digest-headcount
      description: Given a Workday organization ID, fetch a headcount summary by department and post the digest to a designated Slack channel. Invoke when a people-ops or finance team member requests a headcount report.
      inputParameters:
      - name: org_id
        in: body
        type: string
        description: The Workday organization ID to query headcount for.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID where the headcount digest will be posted.
      steps:
      - name: get-headcount
        type: call
        call: workday-hc.get-headcount
        with:
          org_id: '{{org_id}}'
      - name: post-digest
        type: call
        call: slack-hc.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Headcount for org {{org_id}}: {{get-headcount.total}} total employees across {{get-headcount.department_count}} departments.'
  consumes:
  - namespace: workday-hc
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /orgs/{org_id}/headcount
      inputParameters:
      - name: org_id
        in: path
      operations:
      - name: get-headcount
        method: GET
  - namespace: slack-hc
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-snapshot.yml

Pulls usage metrics for an Alexa skill, generates a weekly digest, and posts the summary to a Slack channel.

naftiko: '0.5'
info:
  label: Alexa Skill Usage Analytics Digest
  description: Pulls usage metrics for an Alexa skill, generates a weekly digest, and posts the summary to a Slack channel.
  tags:
  - voice
  - alexa
  - analytics
  - slack
capability:
  exposes:
  - type: mcp
    namespace: alexa-analytics
    port: 8080
    tools:
    - name: generate-usage-digest
      description: Generate a weekly usage analytics digest for an Alexa skill and post it to Slack.
      inputParameters:
      - name: skill_id
        in: body
        type: string
        description: The Alexa skill ID to pull usage metrics for.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID to post the digest to.
      steps:
      - name: get-usage-metrics
        type: call
        call: alexa-metrics.get-skill-metrics
        with:
          skill_id: '{{skill_id}}'
          metric: uniqueCustomers,totalSessions
      - name: post-digest
        type: call
        call: slack-alexa.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Alexa Skill Weekly Digest ({{skill_id}}): Unique customers: {{get-usage-metrics.unique_customers}}, Total sessions: {{get-usage-metrics.total_sessions}}'
  consumes:
  - namespace: alexa-metrics
    type: http
    baseUri: https://api.amazonalexa.com/v1
    authentication:
      type: bearer
      token: $secrets.alexa_developer_token
    resources:
    - name: metrics
      path: /skills/{skill_id}/metrics
      inputParameters:
      - name: skill_id
        in: path
      - name: metric
        in: query
      operations:
      - name: get-skill-metrics
        method: GET
  - namespace: slack-alexa
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → alexa-skill-usage-analytics-digest.yml

Describes a CloudFormation stack and returns its current status, outputs, and last updated timestamp.

naftiko: '0.5'
info:
  label: CloudFormation Stack Status
  description: Describes a CloudFormation stack and returns its current status, outputs, and last updated timestamp.
  tags:
  - cloud
  - infrastructure
  - aws
  - cloudformation
capability:
  exposes:
  - type: mcp
    namespace: cfn-status
    port: 8080
    tools:
    - name: describe-stack
      description: Get the status, outputs, and last update time for a CloudFormation stack.
      inputParameters:
      - name: stack_name
        in: body
        type: string
        description: The CloudFormation stack name or ARN to describe.
      call: cfn-api.describe-stack
      with:
        stack_name: '{{stack_name}}'
      outputParameters:
      - name: stack_status
        type: string
        mapping: $.Stacks[0].StackStatus
      - name: outputs
        type: array
        mapping: $.Stacks[0].Outputs
  consumes:
  - namespace: cfn-api
    type: http
    baseUri: https://cloudformation.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cfn_token
      placement: header
    resources:
    - name: stack
      path: /
      inputParameters:
      - name: stack_name
        in: query
      operations:
      - name: describe-stack
        method: GET
Open in Framework → View in Fleet → cloudformation-stack-status.yml

Analyzes EC2 instance CPU and memory utilization via CloudWatch, generates rightsizing recommendations, and posts the findings to a Slack channel.

naftiko: '0.5'
info:
  label: EC2 Instance Rightsizing Advisor
  description: Analyzes EC2 instance CPU and memory utilization via CloudWatch, generates rightsizing recommendations, and posts the findings to a Slack channel.
  tags:
  - cloud
  - finops
  - cost-optimization
  - aws
  - ec2
  - cloudwatch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ec2-rightsize
    port: 8080
    tools:
    - name: analyze-rightsizing
      description: Given an EC2 instance ID, analyze its CPU and memory utilization over the last 14 days, generate a rightsizing recommendation, and post results to Slack.
      inputParameters:
      - name: instance_id
        in: body
        type: string
        description: The EC2 instance ID to analyze for rightsizing.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID to post the recommendation to.
      steps:
      - name: get-cpu-metrics
        type: call
        call: cloudwatch-rs.get-metric-statistics
        with:
          instance_id: '{{instance_id}}'
          metric_name: CPUUtilization
      - name: get-instance-type
        type: call
        call: ec2-rs.describe-instance
        with:
          instance_id: '{{instance_id}}'
      - name: post-recommendation
        type: call
        call: slack-rs.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Rightsizing Report for {{instance_id}} ({{get-instance-type.instance_type}}): Avg CPU {{get-cpu-metrics.average}}%. Consider downsizing if consistently under 20%.'
  consumes:
  - namespace: cloudwatch-rs
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metrics
      path: /
      inputParameters:
      - name: instance_id
        in: query
      - name: metric_name
        in: query
      operations:
      - name: get-metric-statistics
        method: GET
  - namespace: ec2-rs
    type: http
    baseUri: https://ec2.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ec2_token
      placement: header
    resources:
    - name: instance
      path: /
      inputParameters:
      - name: instance_id
        in: query
      operations:
      - name: describe-instance
        method: GET
  - namespace: slack-rs
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ec2-instance-rightsizing-advisor.yml

When an employee departure is recorded in Workday, revokes GitHub org access, deactivates the Okta account, resolves open Jira tickets assigned to the departing user, and posts a ServiceNow offboarding task.

naftiko: '0.5'
info:
  label: Employee Offboarding Sequence
  description: When an employee departure is recorded in Workday, revokes GitHub org access, deactivates the Okta account, resolves open Jira tickets assigned to the departing user, and posts a ServiceNow offboarding task.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - github
  - jira
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID and last working date, revoke GitHub org membership, deactivate Okta account, reassign open Jira issues, and create a ServiceNow offboarding task.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key to query for open issues assigned to the departing user.
      steps:
      - name: get-employee
        type: call
        call: workday-off.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: remove-github
        type: call
        call: github-off.remove-org-member
        with:
          org: amzn
          username: '{{get-employee.github_username}}'
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          user_id: '{{get-employee.okta_user_id}}'
      - name: create-offboarding-task
        type: call
        call: servicenow-off.create-incident
        with:
          short_description: 'Offboarding: {{get-employee.full_name}}'
          assignment_group: IT_Offboarding
          category: hr_offboarding
  consumes:
  - namespace: workday-off
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: worker
      path: /workers/{worker_id}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - namespace: github-off
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-member
      path: /orgs/{org}/members/{username}
      inputParameters:
      - name: org
        in: path
      - name: username
        in: path
      operations:
      - name: remove-org-member
        method: DELETE
  - namespace: okta
    type: http
    baseUri: https://amazon.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user
      path: /users/{user_id}/lifecycle/deactivate
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - namespace: servicenow-off
    type: http
    baseUri: https://amazon.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → employee-offboarding-sequence.yml

Optimizes last-mile delivery routes for Amazon logistics drivers by fetching pending deliveries, calculating optimal routes via Amazon Location Service, and updating driver assignments.

naftiko: '0.5'
info:
  label: Last Mile Delivery Route Optimizer
  description: Optimizes last-mile delivery routes for Amazon logistics drivers by fetching pending deliveries, calculating optimal routes via Amazon Location Service, and updating driver assignments.
  tags:
  - logistics
  - delivery
  - routing
  - aws
  - location-service
capability:
  exposes:
  - type: mcp
    namespace: route-optimizer
    port: 8080
    tools:
    - name: optimize-route
      description: Fetch pending deliveries for a driver, calculate the optimal route, and update driver assignments.
      inputParameters:
      - name: driver_id
        in: body
        type: string
        description: The delivery driver ID.
      - name: warehouse_id
        in: body
        type: string
        description: The origin warehouse ID.
      steps:
      - name: get-pending-deliveries
        type: call
        call: logistics-route.get-driver-deliveries
        with:
          driver_id: '{{driver_id}}'
          warehouse_id: '{{warehouse_id}}'
      - name: calculate-route
        type: call
        call: location-api.calculate-route-matrix
        with:
          departure_position: '{{get-pending-deliveries.warehouse_coords}}'
          destination_positions: '{{get-pending-deliveries.delivery_coords}}'
      - name: update-assignments
        type: call
        call: logistics-route.update-route-plan
        with:
          driver_id: '{{driver_id}}'
          optimized_order: '{{calculate-route.optimized_sequence}}'
          estimated_duration: '{{calculate-route.total_duration}}'
  consumes:
  - namespace: logistics-route
    type: http
    baseUri: https://api.amazon.com/logistics/v1
    authentication:
      type: bearer
      token: $secrets.amazon_logistics_token
    resources:
    - name: driver-deliveries
      path: /drivers/{driver_id}/deliveries
      inputParameters:
      - name: driver_id
        in: path
      - name: warehouse_id
        in: query
      operations:
      - name: get-driver-deliveries
        method: GET
    - name: route-plan
      path: /drivers/{driver_id}/route-plan
      inputParameters:
      - name: driver_id
        in: path
      operations:
      - name: update-route-plan
        method: PUT
  - namespace: location-api
    type: http
    baseUri: https://routes.geo.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_location_token
      placement: header
    resources:
    - name: route-matrix
      path: /routes/v0/calculators/AmazonLogistics/calculate/route-matrix
      operations:
      - name: calculate-route-matrix
        method: POST
Open in Framework → View in Fleet → last-mile-delivery-route-optimizer.yml

Queries CloudTrail for suspicious API activity patterns, creates a finding in Security Hub, and alerts the SOC team via PagerDuty.

naftiko: '0.5'
info:
  label: CloudTrail Suspicious Activity Alerter
  description: Queries CloudTrail for suspicious API activity patterns, creates a finding in Security Hub, and alerts the SOC team via PagerDuty.
  tags:
  - cloud
  - security
  - monitoring
  - aws
  - cloudtrail
  - security-hub
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: cloudtrail-alert
    port: 8080
    tools:
    - name: detect-suspicious-activity
      description: Query CloudTrail for suspicious patterns, create a Security Hub finding, and page the SOC team.
      inputParameters:
      - name: event_name
        in: body
        type: string
        description: The CloudTrail event name to search for, e.g. ConsoleLogin.
      - name: time_range_hours
        in: body
        type: number
        description: Number of hours to look back for events.
      steps:
      - name: lookup-events
        type: call
        call: cloudtrail-api.lookup-events
        with:
          event_name: '{{event_name}}'
          time_range_hours: '{{time_range_hours}}'
      - name: create-finding
        type: call
        call: securityhub-api.batch-import-findings
        with:
          title: 'Suspicious Activity: {{event_name}}'
          description: '{{lookup-events.event_count}} occurrences of {{event_name}} in the last {{time_range_hours}} hours.'
          severity: HIGH
      - name: page-soc
        type: call
        call: pagerduty-ct.create-incident
        with:
          service_id: SOC_SERVICE
          title: 'CloudTrail Alert: {{lookup-events.event_count}} suspicious {{event_name}} events detected.'
  consumes:
  - namespace: cloudtrail-api
    type: http
    baseUri: https://cloudtrail.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudtrail_token
      placement: header
    resources:
    - name: events
      path: /
      operations:
      - name: lookup-events
        method: POST
  - namespace: securityhub-api
    type: http
    baseUri: https://securityhub.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_securityhub_token
      placement: header
    resources:
    - name: findings
      path: /findings/import
      operations:
      - name: batch-import-findings
        method: POST
  - namespace: pagerduty-ct
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incident
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → cloudtrail-suspicious-activity-alerter.yml

Retrieves the current value of a secret stored in AWS Secrets Manager by secret name or ARN.

naftiko: '0.5'
info:
  label: Secrets Manager Secret Retrieve
  description: Retrieves the current value of a secret stored in AWS Secrets Manager by secret name or ARN.
  tags:
  - cloud
  - security
  - aws
  - secrets-manager
capability:
  exposes:
  - type: mcp
    namespace: secrets-mgr
    port: 8080
    tools:
    - name: get-secret-value
      description: Retrieve the current value of a secret from AWS Secrets Manager. Returns the secret string or binary.
      inputParameters:
      - name: secret_id
        in: body
        type: string
        description: The secret name or ARN to retrieve.
      call: secrets-api.get-secret-value
      with:
        secret_id: '{{secret_id}}'
      outputParameters:
      - name: secret_string
        type: string
        mapping: $.SecretString
  consumes:
  - namespace: secrets-api
    type: http
    baseUri: https://secretsmanager.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_secrets_token
      placement: header
    resources:
    - name: secret
      path: /
      inputParameters:
      - name: secret_id
        in: body
      operations:
      - name: get-secret-value
        method: POST
Open in Framework → View in Fleet → secrets-manager-secret-retrieve.yml

Checks ElastiCache Redis cluster node health and memory utilization via CloudWatch, then posts a health summary to Slack.

naftiko: '0.5'
info:
  label: ElastiCache Cluster Health Reporter
  description: Checks ElastiCache Redis cluster node health and memory utilization via CloudWatch, then posts a health summary to Slack.
  tags:
  - cloud
  - caching
  - monitoring
  - aws
  - elasticache
  - cloudwatch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: elasticache-health
    port: 8080
    tools:
    - name: report-cluster-health
      description: Check ElastiCache cluster health metrics and post a summary to Slack.
      inputParameters:
      - name: cluster_id
        in: body
        type: string
        description: The ElastiCache cluster ID to check.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for health reports.
      steps:
      - name: describe-cluster
        type: call
        call: elasticache-api.describe-cache-cluster
        with:
          cluster_id: '{{cluster_id}}'
      - name: get-memory-metric
        type: call
        call: cw-cache.get-metric-data
        with:
          cluster_id: '{{cluster_id}}'
          metric_name: DatabaseMemoryUsagePercentage
      - name: post-health
        type: call
        call: slack-cache.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'ElastiCache Health: Cluster {{cluster_id}} status: {{describe-cluster.status}}. Memory usage: {{get-memory-metric.average}}%. Nodes: {{describe-cluster.num_cache_nodes}}.'
  consumes:
  - namespace: elasticache-api
    type: http
    baseUri: https://elasticache.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_elasticache_token
      placement: header
    resources:
    - name: cluster
      path: /
      inputParameters:
      - name: cluster_id
        in: query
      operations:
      - name: describe-cache-cluster
        method: GET
  - namespace: cw-cache
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric
      path: /
      operations:
      - name: get-metric-data
        method: POST
  - namespace: slack-cache
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → elasticache-cluster-health-reporter.yml

Checks the publication status of an Alexa skill by skill ID and returns its current certification state.

naftiko: '0.5'
info:
  label: Alexa Skill Status Check
  description: Checks the publication status of an Alexa skill by skill ID and returns its current certification state.
  tags:
  - voice
  - alexa
  - smart-home
capability:
  exposes:
  - type: mcp
    namespace: alexa-status
    port: 8080
    tools:
    - name: get-skill-status
      description: Given an Alexa skill ID, return its current publication and certification status.
      inputParameters:
      - name: skill_id
        in: body
        type: string
        description: The Alexa skill ID to check status for.
      call: alexa-api.get-skill-status
      with:
        skill_id: '{{skill_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.manifest.lastUpdateRequest.status
  consumes:
  - namespace: alexa-api
    type: http
    baseUri: https://api.amazonalexa.com/v1
    authentication:
      type: bearer
      token: $secrets.alexa_developer_token
    resources:
    - name: skill
      path: /skills/{skill_id}/status
      inputParameters:
      - name: skill_id
        in: path
      operations:
      - name: get-skill-status
        method: GET
Open in Framework → View in Fleet → alexa-skill-status-check.yml

Monitors a Kinesis data stream for iterator age and throughput, logs health metrics to CloudWatch, and alerts via PagerDuty if thresholds are breached.

naftiko: '0.5'
info:
  label: Kinesis Data Pipeline Health Check
  description: Monitors a Kinesis data stream for iterator age and throughput, logs health metrics to CloudWatch, and alerts via PagerDuty if thresholds are breached.
  tags:
  - cloud
  - streaming
  - monitoring
  - aws
  - kinesis
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: kinesis-health
    port: 8080
    tools:
    - name: check-pipeline-health
      description: Monitor Kinesis stream health by checking iterator age and throughput. Log to CloudWatch and alert PagerDuty if unhealthy.
      inputParameters:
      - name: stream_name
        in: body
        type: string
        description: The Kinesis stream name to monitor.
      - name: max_iterator_age_ms
        in: body
        type: number
        description: Maximum acceptable iterator age in milliseconds.
      steps:
      - name: get-stream-metrics
        type: call
        call: cw-kinesis.get-metric-data
        with:
          stream_name: '{{stream_name}}'
          metric_name: GetRecords.IteratorAgeMilliseconds
      - name: log-health
        type: call
        call: cw-kinesis.put-metric-data
        with:
          namespace: Custom/KinesisHealth
          metric_name: PipelineHealthScore
          value: '{{get-stream-metrics.average}}'
      - name: trigger-alert
        type: call
        call: pagerduty-kinesis.create-incident
        with:
          service_id: KINESIS_SVC
          title: Kinesis stream {{stream_name}} iterator age {{get-stream-metrics.average}}ms exceeds {{max_iterator_age_ms}}ms
  consumes:
  - namespace: cw-kinesis
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric-data
      path: /
      inputParameters:
      - name: stream_name
        in: query
      - name: metric_name
        in: query
      operations:
      - name: get-metric-data
        method: POST
    - name: put-metric
      path: /
      operations:
      - name: put-metric-data
        method: POST
  - namespace: pagerduty-kinesis
    type: http
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incident
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → kinesis-data-pipeline-health-check.yml

When a Datadog monitor triggers a critical alert, automatically opens a ServiceNow incident, pages the on-call team via PagerDuty, and posts a war-room Slack message.

naftiko: '0.5'
info:
  label: Datadog Alert Incident Bridge
  description: When a Datadog monitor triggers a critical alert, automatically opens a ServiceNow incident, pages the on-call team via PagerDuty, and posts a war-room Slack message.
  tags:
  - observability
  - incident-response
  - datadog
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog monitor ID and alert details, open a ServiceNow incident, trigger a PagerDuty incident for the on-call engineer, and post a war-room message in Slack.
      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 human-readable name of the Datadog monitor.
      - name: alert_message
        in: body
        type: string
        description: The alert body text describing what threshold was breached.
      - name: pagerduty_service_key
        in: body
        type: string
        description: The PagerDuty integration service key for routing the incident.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the war-room notification.
      steps:
      - name: open-incident
        type: call
        call: servicenow-obs.create-incident
        with:
          short_description: 'Critical alert: {{monitor_name}}'
          description: '{{alert_message}}'
          urgency: '1'
          impact: '1'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          service_key: '{{pagerduty_service_key}}'
          description: 'Critical Datadog alert: {{monitor_name}}'
          incident_key: dd-{{monitor_id}}
      - name: post-warroom
        type: call
        call: slack-obs.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'CRITICAL ALERT: {{monitor_name}} | ServiceNow: {{open-incident.number}} | PagerDuty: {{page-oncall.incident_id}} | {{alert_message}}'
  consumes:
  - namespace: servicenow-obs
    type: http
    baseUri: https://amazon.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - namespace: pagerduty
    type: http
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incident
      path: /enqueue
      operations:
      - name: create-incident
        method: POST
  - namespace: slack-obs
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-alert-incident-bridge.yml

Retrieves the current status and running task count for an Amazon ECS service in a cluster.

naftiko: '0.5'
info:
  label: ECS Service Status
  description: Retrieves the current status and running task count for an Amazon ECS service in a cluster.
  tags:
  - cloud
  - containers
  - aws
  - ecs
capability:
  exposes:
  - type: mcp
    namespace: ecs-status
    port: 8080
    tools:
    - name: describe-service
      description: Get the status, running count, and desired count for an ECS service. Use to verify deployment health.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: The ECS cluster name.
      - name: service_name
        in: body
        type: string
        description: The ECS service name to describe.
      call: ecs-api.describe-service
      with:
        cluster_name: '{{cluster_name}}'
        service_name: '{{service_name}}'
      outputParameters:
      - name: running_count
        type: number
        mapping: $.services[0].runningCount
      - name: status
        type: string
        mapping: $.services[0].status
  consumes:
  - namespace: ecs-api
    type: http
    baseUri: https://ecs.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ecs_token
      placement: header
    resources:
    - name: service
      path: /
      inputParameters:
      - name: cluster_name
        in: body
      - name: service_name
        in: body
      operations:
      - name: describe-service
        method: POST
Open in Framework → View in Fleet → ecs-service-status.yml

Adds an IP to an AWS WAF IP set block list, logs the change to DynamoDB for audit, and notifies the security team via Slack.

naftiko: '0.5'
info:
  label: WAF Rule Update with Notification
  description: Adds an IP to an AWS WAF IP set block list, logs the change to DynamoDB for audit, and notifies the security team via Slack.
  tags:
  - cloud
  - security
  - aws
  - waf
  - dynamodb
  - slack
capability:
  exposes:
  - type: mcp
    namespace: waf-update
    port: 8080
    tools:
    - name: block-ip-and-notify
      description: Add an IP address to a WAF block list, record the action in DynamoDB, and alert the security team.
      inputParameters:
      - name: ip_set_id
        in: body
        type: string
        description: The WAF IP set ID to update.
      - name: ip_address
        in: body
        type: string
        description: The IP address to block in CIDR format.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for security notifications.
      steps:
      - name: update-ip-set
        type: call
        call: waf-api.update-ip-set
        with:
          ip_set_id: '{{ip_set_id}}'
          ip_address: '{{ip_address}}'
      - name: log-action
        type: call
        call: dynamo-waf.put-item
        with:
          table_name: waf-audit-log
          ip_address: '{{ip_address}}'
          action: BLOCK
          ip_set_id: '{{ip_set_id}}'
      - name: notify-security
        type: call
        call: slack-waf.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'WAF Update: IP {{ip_address}} added to block list {{ip_set_id}}. Audit record created.'
  consumes:
  - namespace: waf-api
    type: http
    baseUri: https://wafv2.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_waf_token
      placement: header
    resources:
    - name: ip-set
      path: /
      operations:
      - name: update-ip-set
        method: POST
  - namespace: dynamo-waf
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
  - namespace: slack-waf
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → waf-rule-update-with-notification.yml

Retrieves purchase orders from Amazon Vendor Central, confirms them, and logs the confirmation to DynamoDB for tracking.

naftiko: '0.5'
info:
  label: Vendor Central Purchase Order Processor
  description: Retrieves purchase orders from Amazon Vendor Central, confirms them, and logs the confirmation to DynamoDB for tracking.
  tags:
  - ecommerce
  - marketplace
  - vendor-central
  - supply-chain
  - dynamodb
capability:
  exposes:
  - type: mcp
    namespace: vendor-po
    port: 8080
    tools:
    - name: process-purchase-order
      description: Fetch a purchase order from Vendor Central, confirm it, and log the confirmation.
      inputParameters:
      - name: purchase_order_number
        in: body
        type: string
        description: The Vendor Central purchase order number.
      steps:
      - name: get-po
        type: call
        call: vendor-api.get-purchase-order
        with:
          purchase_order_number: '{{purchase_order_number}}'
      - name: confirm-po
        type: call
        call: vendor-api.confirm-purchase-order
        with:
          purchase_order_number: '{{purchase_order_number}}'
          items: '{{get-po.items}}'
      - name: log-confirmation
        type: call
        call: dynamo-vendor.put-item
        with:
          table_name: vendor-po-confirmations
          po_number: '{{purchase_order_number}}'
          status: confirmed
          item_count: '{{get-po.item_count}}'
  consumes:
  - namespace: vendor-api
    type: http
    baseUri: https://sellingpartnerapi-na.amazon.com/vendor
    authentication:
      type: bearer
      token: $secrets.sp_api_vendor_token
    resources:
    - name: purchase-order
      path: /orders/v1/purchaseOrders/{purchase_order_number}
      inputParameters:
      - name: purchase_order_number
        in: path
      operations:
      - name: get-purchase-order
        method: GET
    - name: confirmation
      path: /orders/v1/purchaseOrders/confirmation
      operations:
      - name: confirm-purchase-order
        method: POST
  - namespace: dynamo-vendor
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
Open in Framework → View in Fleet → vendor-central-purchase-order-processor.yml

Checks real-time inventory levels for a product at a specific Whole Foods Market store location.

naftiko: '0.5'
info:
  label: Whole Foods Store Inventory Check
  description: Checks real-time inventory levels for a product at a specific Whole Foods Market store location.
  tags:
  - grocery
  - whole-foods
  - inventory
  - retail
capability:
  exposes:
  - type: mcp
    namespace: wfm-inventory
    port: 8080
    tools:
    - name: check-inventory
      description: Check the current inventory level for a product at a Whole Foods Market store.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Whole Foods store ID to check inventory at.
      - name: product_sku
        in: body
        type: string
        description: The product SKU to check availability for.
      call: wfm-api.get-inventory
      with:
        store_id: '{{store_id}}'
        product_sku: '{{product_sku}}'
      outputParameters:
      - name: quantity_on_hand
        type: number
        mapping: $.inventory.quantityOnHand
      - name: in_stock
        type: boolean
        mapping: $.inventory.inStock
  consumes:
  - namespace: wfm-api
    type: http
    baseUri: https://api.wholefoodsmarket.com/v2
    authentication:
      type: bearer
      token: $secrets.wfm_api_token
    resources:
    - name: inventory
      path: /stores/{store_id}/inventory/{product_sku}
      inputParameters:
      - name: store_id
        in: path
      - name: product_sku
        in: path
      operations:
      - name: get-inventory
        method: GET
Open in Framework → View in Fleet → whole-foods-store-inventory-check.yml

Deploys a SageMaker model to an endpoint, runs a validation inference, and records the deployment in DynamoDB for tracking.

naftiko: '0.5'
info:
  label: SageMaker Model Deployment Pipeline
  description: Deploys a SageMaker model to an endpoint, runs a validation inference, and records the deployment in DynamoDB for tracking.
  tags:
  - cloud
  - machine-learning
  - deployment
  - aws
  - sagemaker
  - dynamodb
capability:
  exposes:
  - type: mcp
    namespace: sagemaker-deploy
    port: 8080
    tools:
    - name: deploy-model
      description: Deploy a SageMaker model to an endpoint, validate with a test inference, and log the deployment.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The SageMaker model name to deploy.
      - name: endpoint_name
        in: body
        type: string
        description: The target SageMaker endpoint name.
      - name: instance_type
        in: body
        type: string
        description: The instance type for the endpoint, e.g. ml.m5.large.
      steps:
      - name: create-endpoint-config
        type: call
        call: sagemaker-api.create-endpoint-config
        with:
          model_name: '{{model_name}}'
          endpoint_name: '{{endpoint_name}}'
          instance_type: '{{instance_type}}'
      - name: update-endpoint
        type: call
        call: sagemaker-api.update-endpoint
        with:
          endpoint_name: '{{endpoint_name}}'
          config_name: '{{create-endpoint-config.config_name}}'
      - name: log-deployment
        type: call
        call: dynamo-ml.put-item
        with:
          table_name: ml-deployments
          model_name: '{{model_name}}'
          endpoint_name: '{{endpoint_name}}'
          status: '{{update-endpoint.status}}'
  consumes:
  - namespace: sagemaker-api
    type: http
    baseUri: https://api.sagemaker.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sagemaker_token
      placement: header
    resources:
    - name: endpoint-config
      path: /
      operations:
      - name: create-endpoint-config
        method: POST
    - name: endpoint
      path: /
      operations:
      - name: update-endpoint
        method: POST
  - namespace: dynamo-ml
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
Open in Framework → View in Fleet → sagemaker-model-deployment-pipeline.yml

Queries Snowflake task history to detect failed or long-running data pipeline tasks, creates a Jira data-engineering ticket, and posts an alert to the data-platform Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Health Monitor
  description: Queries Snowflake task history to detect failed or long-running data pipeline tasks, creates a Jira data-engineering ticket, and posts an alert to the data-platform Slack channel.
  tags:
  - data
  - analytics
  - monitoring
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: monitor-pipeline-health
      description: Given a Snowflake database and schema, query task execution history for failures or SLA breaches, open a Jira ticket for investigation, and alert the data-platform Slack channel.
      inputParameters:
      - name: snowflake_database
        in: body
        type: string
        description: The Snowflake database name to check task history for, e.g. ANALYTICS_PROD.
      - name: snowflake_schema
        in: body
        type: string
        description: The Snowflake schema containing the monitored tasks.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the data-platform alert.
      steps:
      - name: check-tasks
        type: call
        call: snowflake.query-task-history
        with:
          database: '{{snowflake_database}}'
          schema: '{{snowflake_schema}}'
      - name: create-ticket
        type: call
        call: jira-data.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: Pipeline health issue detected in {{snowflake_database}}.{{snowflake_schema}}
          description: 'Failed tasks: {{check-tasks.failed_count}}. Last failure: {{check-tasks.last_failed_task}}'
      - name: post-alert
        type: call
        call: slack-data.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Data Pipeline Alert: {{check-tasks.failed_count}} failed tasks in {{snowflake_database}}. Jira: {{create-ticket.key}}'
  consumes:
  - namespace: snowflake
    type: http
    baseUri: https://amazon.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
  - namespace: jira-data
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-data
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-pipeline-health-monitor.yml

Collects health telemetry from Amazon warehouse robotics systems, aggregates metrics in CloudWatch, and posts a fleet health summary to Slack.

naftiko: '0.5'
info:
  label: Warehouse Robotics Health Dashboard
  description: Collects health telemetry from Amazon warehouse robotics systems, aggregates metrics in CloudWatch, and posts a fleet health summary to Slack.
  tags:
  - logistics
  - robotics
  - monitoring
  - warehouse
  - cloudwatch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: robotics-health
    port: 8080
    tools:
    - name: report-fleet-health
      description: Collect robotics fleet health data, log to CloudWatch, and post a summary to Slack.
      inputParameters:
      - name: warehouse_id
        in: body
        type: string
        description: The Amazon fulfillment center ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for robotics health reports.
      steps:
      - name: get-fleet-status
        type: call
        call: robotics-api.get-fleet-health
        with:
          warehouse_id: '{{warehouse_id}}'
      - name: log-metrics
        type: call
        call: cw-robotics.put-metric-data
        with:
          namespace: Custom/WarehouseRobotics
          metric_name: ActiveRobots
          value: '{{get-fleet-status.active_count}}'
      - name: post-summary
        type: call
        call: slack-robotics.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Warehouse {{warehouse_id}} Robotics: {{get-fleet-status.active_count}} active, {{get-fleet-status.idle_count}} idle, {{get-fleet-status.error_count}} in error state.'
  consumes:
  - namespace: robotics-api
    type: http
    baseUri: https://api.amazon.com/warehouse/robotics/v1
    authentication:
      type: bearer
      token: $secrets.amazon_robotics_token
    resources:
    - name: fleet
      path: /warehouses/{warehouse_id}/fleet/health
      inputParameters:
      - name: warehouse_id
        in: path
      operations:
      - name: get-fleet-health
        method: GET
  - namespace: cw-robotics
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric
      path: /
      operations:
      - name: put-metric-data
        method: POST
  - namespace: slack-robotics
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → warehouse-robotics-health-dashboard.yml

When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts a Datadog deployment event marker, and alerts the engineering team Slack channel.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure Response
  description: When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts a Datadog deployment event marker, and alerts the engineering team Slack channel.
  tags:
  - devops
  - ci-cd
  - incident-response
  - github
  - jira
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions pipeline failure event with project, branch, commit SHA, and log URL, create a Jira bug, post a Datadog deployment marker, and alert the Slack engineering channel.
      inputParameters:
      - name: project
        in: body
        type: string
        description: The GitHub repository name where the pipeline failed, e.g. amazon/platform-core.
      - name: branch
        in: body
        type: string
        description: The branch name where the pipeline failure occurred.
      - name: commit_sha
        in: body
        type: string
        description: The git commit SHA that triggered the failed pipeline run.
      - name: failed_job
        in: body
        type: string
        description: The name of the specific job that failed in the workflow.
      - name: log_url
        in: body
        type: string
        description: The URL to the failed pipeline run logs in GitHub Actions.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for engineering alerts.
      steps:
      - name: create-bug
        type: call
        call: jira-devops.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{project}} / {{branch}} — {{failed_job}}'
          description: 'Commit: {{commit_sha}}

            Log: {{log_url}}'
      - name: create-dd-event
        type: call
        call: datadog.create-event
        with:
          title: 'Pipeline failure: {{project}} on {{branch}}'
          text: 'Job {{failed_job}} failed. Commit: {{commit_sha}}'
          alert_type: error
      - name: post-alert
        type: call
        call: slack-devops.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Pipeline Failure: {{project}} | Branch: {{branch}} | Job: {{failed_job}} | Jira: {{create-bug.key}} | Log: {{log_url}}'
  consumes:
  - namespace: jira-devops
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: datadog
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: event
      path: /events
      operations:
      - name: create-event
        method: POST
  - namespace: slack-devops
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-response.yml

Fetches a Confluence page by ID, sends the content to the Anthropic Claude API for summarization, and posts the executive summary to a Slack channel.

naftiko: '0.5'
info:
  label: AI-Assisted Document Summarization
  description: Fetches a Confluence page by ID, sends the content to the Anthropic Claude API for summarization, and posts the executive summary to a Slack channel.
  tags:
  - ai
  - knowledge-management
  - confluence
  - anthropic
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ai-summarize
    port: 8080
    tools:
    - name: summarize-confluence-page
      description: Given a Confluence page ID and a Slack channel, fetch the page content from Confluence, send it to the Anthropic Claude API for a concise executive summary, and post the result to Slack.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Confluence page ID to fetch and summarize.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID where the AI-generated summary will be posted.
      steps:
      - name: get-page
        type: call
        call: confluence-ai.get-page
        with:
          page_id: '{{page_id}}'
      - name: generate-summary
        type: call
        call: anthropic-ai.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 300
          system: You are a technical writer. Produce a concise 3-sentence executive summary of the following document.
          user_message: '{{get-page.body}}'
      - name: post-summary
        type: call
        call: slack-ai.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'AI Summary of ''{{get-page.title}}'': {{generate-summary.content}}'
  consumes:
  - namespace: confluence-ai
    type: http
    baseUri: https://amazon.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: page
      path: /content/{page_id}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - namespace: anthropic-ai
    type: http
    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
  - namespace: slack-ai
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ai-assisted-document-summarization.yml

Given a service name, searches the Confluence knowledge base for the relevant runbook page and returns the runbook URL and summary for use during incident response.

naftiko: '0.5'
info:
  label: Confluence Runbook Lookup
  description: Given a service name, searches the Confluence knowledge base for the relevant runbook page and returns the runbook URL and summary for use during incident response.
  tags:
  - itsm
  - knowledge-management
  - confluence
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: kb-lookup
    port: 8080
    tools:
    - name: get-runbook
      description: Given a service name, search Confluence for the relevant runbook page and return the page URL and excerpt. Use during incident triage to quickly surface operational runbooks.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The service name to search for in Confluence runbooks, e.g. payment-gateway.
      call: confluence.search-content
      with:
        cql: type=page AND title~"{{service_name}} runbook"
      outputParameters:
      - name: runbook_url
        type: string
        mapping: $.results[0]._links.webui
      - name: runbook_title
        type: string
        mapping: $.results[0].title
  consumes:
  - namespace: confluence
    type: http
    baseUri: https://amazon.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: content
      path: /content/search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → confluence-runbook-lookup.yml

Retrieves the approximate number of messages in an SQS queue to monitor backlog health.

naftiko: '0.5'
info:
  label: SQS Queue Depth Check
  description: Retrieves the approximate number of messages in an SQS queue to monitor backlog health.
  tags:
  - cloud
  - messaging
  - aws
  - sqs
capability:
  exposes:
  - type: mcp
    namespace: sqs-depth
    port: 8080
    tools:
    - name: get-queue-attributes
      description: Get the approximate message count and other attributes for an SQS queue. Use to monitor queue backlog.
      inputParameters:
      - name: queue_url
        in: body
        type: string
        description: The full SQS queue URL to check.
      call: sqs-api.get-queue-attributes
      with:
        queue_url: '{{queue_url}}'
      outputParameters:
      - name: message_count
        type: number
        mapping: $.Attributes.ApproximateNumberOfMessages
  consumes:
  - namespace: sqs-api
    type: http
    baseUri: https://sqs.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sqs_token
      placement: header
    resources:
    - name: queue
      path: /
      inputParameters:
      - name: queue_url
        in: body
      operations:
      - name: get-queue-attributes
        method: POST
Open in Framework → View in Fleet → sqs-queue-depth-check.yml

Reconciles Fulfillment by Amazon inventory levels against seller records, identifies discrepancies, and creates a case in Seller Central support.

naftiko: '0.5'
info:
  label: FBA Inventory Reconciliation
  description: Reconciles Fulfillment by Amazon inventory levels against seller records, identifies discrepancies, and creates a case in Seller Central support.
  tags:
  - ecommerce
  - marketplace
  - fulfillment
  - fba
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: fba-reconcile
    port: 8080
    tools:
    - name: reconcile-inventory
      description: Compare FBA inventory levels with seller records and create a support case for discrepancies.
      inputParameters:
      - name: seller_id
        in: body
        type: string
        description: The Amazon seller ID.
      - name: sku
        in: body
        type: string
        description: The product SKU to reconcile.
      - name: expected_quantity
        in: body
        type: number
        description: The expected inventory quantity per seller records.
      steps:
      - name: get-fba-inventory
        type: call
        call: sp-fba.get-inventory-summary
        with:
          seller_id: '{{seller_id}}'
          sku: '{{sku}}'
      - name: create-case
        type: call
        call: sp-fba.create-support-case
        with:
          subject: 'FBA Inventory Discrepancy: SKU {{sku}}'
          description: 'Expected: {{expected_quantity}}, FBA reports: {{get-fba-inventory.fulfillable_quantity}}. Difference: needs investigation.'
  consumes:
  - namespace: sp-fba
    type: http
    baseUri: https://sellingpartnerapi-na.amazon.com
    authentication:
      type: bearer
      token: $secrets.sp_api_token
    resources:
    - name: inventory
      path: /fba/inventory/v1/summaries
      inputParameters:
      - name: seller_id
        in: query
      - name: sku
        in: query
      operations:
      - name: get-inventory-summary
        method: GET
    - name: support
      path: /messaging/v1/cases
      operations:
      - name: create-support-case
        method: POST
Open in Framework → View in Fleet → fba-inventory-reconciliation.yml

Processes a customer return request from the Selling Partner API, initiates a refund, and notifies the seller via email through SES.

naftiko: '0.5'
info:
  label: Marketplace Return Processor
  description: Processes a customer return request from the Selling Partner API, initiates a refund, and notifies the seller via email through SES.
  tags:
  - ecommerce
  - marketplace
  - returns
  - seller-central
  - ses
capability:
  exposes:
  - type: mcp
    namespace: return-process
    port: 8080
    tools:
    - name: process-return
      description: Process a marketplace return request, initiate the refund, and notify the seller via email.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The order ID for the return request.
      - name: return_reason
        in: body
        type: string
        description: The customer-provided return reason.
      - name: seller_email
        in: body
        type: string
        description: The seller email address for return notifications.
      steps:
      - name: get-order-details
        type: call
        call: sp-returns.get-order
        with:
          order_id: '{{order_id}}'
      - name: create-refund
        type: call
        call: sp-returns.create-refund
        with:
          order_id: '{{order_id}}'
          amount: '{{get-order-details.order_total}}'
      - name: notify-seller
        type: call
        call: ses-returns.send-email
        with:
          to: '{{seller_email}}'
          subject: 'Return Processed: Order {{order_id}}'
          body: 'A return has been processed for order {{order_id}}. Reason: {{return_reason}}. Refund amount: ${{get-order-details.order_total}}. Refund ID: {{create-refund.refund_id}}.'
  consumes:
  - namespace: sp-returns
    type: http
    baseUri: https://sellingpartnerapi-na.amazon.com
    authentication:
      type: bearer
      token: $secrets.sp_api_token
    resources:
    - name: order
      path: /orders/v0/orders/{order_id}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
    - name: refund
      path: /orders/v0/orders/{order_id}/refund
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: create-refund
        method: POST
  - namespace: ses-returns
    type: http
    baseUri: https://email.us-east-1.amazonaws.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ses_token
      placement: header
    resources:
    - name: email
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → marketplace-return-processor.yml

Searches the Amazon product catalog by keyword and returns matching product listings with prices and ratings.

naftiko: '0.5'
info:
  label: Product Catalog Search
  description: Searches the Amazon product catalog by keyword and returns matching product listings with prices and ratings.
  tags:
  - ecommerce
  - catalog
  - search
capability:
  exposes:
  - type: mcp
    namespace: catalog-search
    port: 8080
    tools:
    - name: search-products
      description: Search the Amazon product catalog by keyword. Returns product titles, ASINs, prices, and ratings.
      inputParameters:
      - name: keywords
        in: body
        type: string
        description: The search keywords for product lookup.
      - name: category
        in: body
        type: string
        description: The product category to filter by, e.g. Electronics.
      call: catalog-api.search-items
      with:
        keywords: '{{keywords}}'
        category: '{{category}}'
      outputParameters:
      - name: items
        type: array
        mapping: $.SearchResult.Items
  consumes:
  - namespace: catalog-api
    type: http
    baseUri: https://webservices.amazon.com/paapi5
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.amazon_paapi_token
      placement: header
    resources:
    - name: items
      path: /searchitems
      inputParameters:
      - name: keywords
        in: body
      - name: category
        in: body
      operations:
      - name: search-items
        method: POST
Open in Framework → View in Fleet → product-catalog-search.yml

When an employee submits a time-off request in Workday, notifies the manager via Slack and creates a Jira task for the manager to approve or deny the request.

naftiko: '0.5'
info:
  label: Workday Absence Request Processor
  description: When an employee submits a time-off request in Workday, notifies the manager via Slack and creates a Jira task for the manager to approve or deny the request.
  tags:
  - hr
  - time-off
  - workday
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: hr-absence
    port: 8080
    tools:
    - name: process-absence-request
      description: Given a Workday time-off request ID and manager Slack user ID, fetch request details, notify the manager in Slack, and create a Jira approval task.
      inputParameters:
      - name: time_off_request_id
        in: body
        type: string
        description: The Workday time-off request ID submitted by the employee.
      - name: manager_slack_id
        in: body
        type: string
        description: The Slack user ID of the employee's manager for the approval notification.
      steps:
      - name: get-request
        type: call
        call: workday-abs.get-time-off-request
        with:
          request_id: '{{time_off_request_id}}'
      - name: notify-manager
        type: call
        call: slack-abs.post-message
        with:
          channel: '{{manager_slack_id}}'
          text: 'Time-off request pending approval: {{get-request.employee_name}} has requested {{get-request.days}} days from {{get-request.start_date}} to {{get-request.end_date}}.'
      - name: create-approval-task
        type: call
        call: jira-abs.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: 'Approve time-off: {{get-request.employee_name}} ({{get-request.start_date}} – {{get-request.end_date}})'
          description: 'Workday request ID: {{time_off_request_id}}'
  consumes:
  - namespace: workday-abs
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-off-request
      path: /timeOffRequests/{request_id}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-time-off-request
        method: GET
  - namespace: slack-abs
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - namespace: jira-abs
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → workday-absence-request-processor.yml

Queries Workday for employees with pending performance reviews, sends reminder messages to each employee and their manager via Slack, and creates tracking tasks in Jira.

naftiko: '0.5'
info:
  label: Workday Performance Review Reminder
  description: Queries Workday for employees with pending performance reviews, sends reminder messages to each employee and their manager via Slack, and creates tracking tasks in Jira.
  tags:
  - hr
  - performance-management
  - workday
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: hr-perf
    port: 8080
    tools:
    - name: send-review-reminders
      description: Given a Workday performance review cycle ID, fetch all employees with pending self-evaluations, send Slack reminders to employees and their managers, and create Jira tracking tasks for HR.
      inputParameters:
      - name: review_cycle_id
        in: body
        type: string
        description: The Workday performance review cycle ID to query pending evaluations for.
      - name: hr_jira_project
        in: body
        type: string
        description: The Jira project key for HR tracking tasks, e.g. HROPS.
      - name: hr_slack_channel
        in: body
        type: string
        description: The Slack channel ID for HR operations notifications.
      steps:
      - name: get-pending-reviews
        type: call
        call: workday-perf.get-pending-reviews
        with:
          review_cycle_id: '{{review_cycle_id}}'
      - name: create-hr-task
        type: call
        call: jira-perf.create-issue
        with:
          project_key: '{{hr_jira_project}}'
          issuetype: Task
          summary: 'Performance review cycle {{review_cycle_id}}: {{get-pending-reviews.pending_count}} reviews pending'
          description: 'Review cycle: {{review_cycle_id}}

            Pending count: {{get-pending-reviews.pending_count}}'
      - name: post-hr-alert
        type: call
        call: slack-perf.post-message
        with:
          channel: '{{hr_slack_channel}}'
          text: 'Performance Review Reminder: {{get-pending-reviews.pending_count}} employees have pending self-evaluations in cycle {{review_cycle_id}}. Jira task: {{create-hr-task.key}}'
  consumes:
  - namespace: workday-perf
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: pending-reviews
      path: /performanceManagement/{review_cycle_id}/pendingReviews
      inputParameters:
      - name: review_cycle_id
        in: path
      operations:
      - name: get-pending-reviews
        method: GET
  - namespace: jira-perf
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-perf
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-reminder.yml

Lists all SNS topics in the AWS account and returns their ARNs for notification management.

naftiko: '0.5'
info:
  label: SNS Topic List
  description: Lists all SNS topics in the AWS account and returns their ARNs for notification management.
  tags:
  - cloud
  - messaging
  - aws
  - sns
capability:
  exposes:
  - type: mcp
    namespace: sns-topics
    port: 8080
    tools:
    - name: list-topics
      description: List all SNS topics in the AWS account. Returns topic ARNs for use in notification workflows.
      inputParameters:
      - name: next_token
        in: body
        type: string
        description: Pagination token for listing topics. Pass empty string for first page.
      call: sns-api.list-topics
      with:
        next_token: '{{next_token}}'
      outputParameters:
      - name: topics
        type: array
        mapping: $.Topics
  consumes:
  - namespace: sns-api
    type: http
    baseUri: https://sns.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sns_token
      placement: header
    resources:
    - name: topics
      path: /
      inputParameters:
      - name: next_token
        in: query
      operations:
      - name: list-topics
        method: GET
Open in Framework → View in Fleet → sns-topic-list.yml

Runs a data quality check query against a Snowflake table, and if null counts or row anomalies exceed acceptable thresholds, creates a Jira data-quality ticket and alerts the data-platform Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Gate
  description: Runs a data quality check query against a Snowflake table, and if null counts or row anomalies exceed acceptable thresholds, creates a Jira data-quality ticket and alerts the data-platform Slack channel.
  tags:
  - data
  - analytics
  - data-quality
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: dq-ops
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Given a Snowflake table fully qualified name and a null threshold percentage, run a data quality query. If null rate exceeds the threshold, create a Jira DQ ticket and post a Slack alert.
      inputParameters:
      - name: table_fqn
        in: body
        type: string
        description: The fully qualified Snowflake table name to check, e.g. ANALYTICS_PROD.SALES.ORDERS.
      - name: null_threshold_pct
        in: body
        type: number
        description: Maximum allowable null percentage in the critical columns (0–100).
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID to notify when a data quality issue is found.
      steps:
      - name: run-dq-query
        type: call
        call: snowflake-dq.run-statement
        with:
          statement: SELECT COUNT_IF(order_id IS NULL) / COUNT(*) * 100 AS null_pct FROM {{table_fqn}}
      - name: create-dq-ticket
        type: call
        call: jira-dq.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'Data quality issue: {{table_fqn}} null rate = {{run-dq-query.null_pct}}%'
          description: 'Table: {{table_fqn}}

            Null rate: {{run-dq-query.null_pct}}%

            Threshold: {{null_threshold_pct}}%'
      - name: post-dq-alert
        type: call
        call: slack-dq.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Data Quality Alert: {{table_fqn}} null rate = {{run-dq-query.null_pct}}% (max {{null_threshold_pct}}%). Jira: {{create-dq-ticket.key}}'
  consumes:
  - namespace: snowflake-dq
    type: http
    baseUri: https://amazon.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statement
      path: /statements
      operations:
      - name: run-statement
        method: POST
  - namespace: jira-dq
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-dq
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-gate.yml

Monitors Whole Foods inventory for low-stock items, creates a replenishment order in the supply chain system, and notifies the store manager via Slack.

naftiko: '0.5'
info:
  label: Whole Foods Low Stock Replenishment
  description: Monitors Whole Foods inventory for low-stock items, creates a replenishment order in the supply chain system, and notifies the store manager via Slack.
  tags:
  - grocery
  - whole-foods
  - inventory
  - supply-chain
  - slack
capability:
  exposes:
  - type: mcp
    namespace: wfm-replenish
    port: 8080
    tools:
    - name: replenish-low-stock
      description: Check inventory levels at a Whole Foods store, create replenishment orders for low-stock items, and notify the store manager.
      inputParameters:
      - name: store_id
        in: body
        type: string
        description: The Whole Foods store ID to check.
      - name: threshold
        in: body
        type: number
        description: The minimum stock level before triggering replenishment.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for store manager notifications.
      steps:
      - name: check-inventory
        type: call
        call: wfm-inv.get-low-stock-items
        with:
          store_id: '{{store_id}}'
          threshold: '{{threshold}}'
      - name: create-replenishment
        type: call
        call: wfm-supply.create-order
        with:
          store_id: '{{store_id}}'
          items: '{{check-inventory.low_stock_items}}'
      - name: notify-manager
        type: call
        call: slack-wfm.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Low Stock Alert for Store {{store_id}}: {{check-inventory.item_count}} items below threshold. Replenishment order {{create-replenishment.order_id}} created.'
  consumes:
  - namespace: wfm-inv
    type: http
    baseUri: https://api.wholefoodsmarket.com/v2
    authentication:
      type: bearer
      token: $secrets.wfm_api_token
    resources:
    - name: low-stock
      path: /stores/{store_id}/inventory/low-stock
      inputParameters:
      - name: store_id
        in: path
      - name: threshold
        in: query
      operations:
      - name: get-low-stock-items
        method: GET
  - namespace: wfm-supply
    type: http
    baseUri: https://api.wholefoodsmarket.com/v2
    authentication:
      type: bearer
      token: $secrets.wfm_supply_token
    resources:
    - name: order
      path: /supply-chain/orders
      operations:
      - name: create-order
        method: POST
  - namespace: slack-wfm
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → whole-foods-low-stock-replenishment.yml

Generates an Amazon DSP programmatic advertising report, uploads it to S3, and shares the download link via Slack.

naftiko: '0.5'
info:
  label: DSP Advertising Report Generator
  description: Generates an Amazon DSP programmatic advertising report, uploads it to S3, and shares the download link via Slack.
  tags:
  - advertising
  - dsp
  - analytics
  - aws
  - s3
  - slack
capability:
  exposes:
  - type: mcp
    namespace: dsp-report
    port: 8080
    tools:
    - name: generate-dsp-report
      description: Generate a DSP advertising report, store it in S3, and share the link in Slack.
      inputParameters:
      - name: advertiser_id
        in: body
        type: string
        description: The Amazon DSP advertiser ID.
      - name: report_type
        in: body
        type: string
        description: The report type, e.g. campaign, audience, inventory.
      - name: s3_bucket
        in: body
        type: string
        description: The S3 bucket for report storage.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to share the report link.
      steps:
      - name: generate-report
        type: call
        call: dsp-api.create-report
        with:
          advertiser_id: '{{advertiser_id}}'
          report_type: '{{report_type}}'
      - name: upload-to-s3
        type: call
        call: s3-dsp.put-object
        with:
          bucket: '{{s3_bucket}}'
          key: dsp-reports/{{advertiser_id}}/{{generate-report.report_id}}.csv
          body: '{{generate-report.report_data}}'
      - name: share-link
        type: call
        call: slack-dsp.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'DSP Report Ready: s3://{{s3_bucket}}/dsp-reports/{{advertiser_id}}/{{generate-report.report_id}}.csv'
  consumes:
  - namespace: dsp-api
    type: http
    baseUri: https://advertising-api.amazon.com/dsp/reports/v3
    authentication:
      type: bearer
      token: $secrets.amazon_dsp_token
    resources:
    - name: report
      path: /
      operations:
      - name: create-report
        method: POST
  - namespace: s3-dsp
    type: http
    baseUri: https://s3.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_s3_token
      placement: header
    resources:
    - name: object
      path: /{bucket}/{key}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - namespace: slack-dsp
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → dsp-advertising-report-generator.yml

Tracks Amazon Bedrock foundation model invocation metrics, logs usage patterns to DynamoDB, and posts a usage digest to Slack.

naftiko: '0.5'
info:
  label: Bedrock Model Invocation Monitor
  description: Tracks Amazon Bedrock foundation model invocation metrics, logs usage patterns to DynamoDB, and posts a usage digest to Slack.
  tags:
  - ai
  - generative-ai
  - monitoring
  - aws
  - bedrock
  - dynamodb
  - slack
capability:
  exposes:
  - type: mcp
    namespace: bedrock-monitor
    port: 8080
    tools:
    - name: monitor-model-usage
      description: Track Bedrock model invocations, log usage to DynamoDB, and post a digest to Slack.
      inputParameters:
      - name: model_id
        in: body
        type: string
        description: The Bedrock model ID to monitor, e.g. anthropic.claude-v2.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for usage digests.
      steps:
      - name: get-invocation-metrics
        type: call
        call: cw-bedrock.get-metric-data
        with:
          namespace: AWS/Bedrock
          metric_name: Invocations
          model_id: '{{model_id}}'
      - name: log-usage
        type: call
        call: dynamo-bedrock.put-item
        with:
          table_name: bedrock-usage-log
          model_id: '{{model_id}}'
          invocation_count: '{{get-invocation-metrics.sum}}'
      - name: post-digest
        type: call
        call: slack-bedrock.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Bedrock Usage Digest: Model {{model_id}} - {{get-invocation-metrics.sum}} invocations in the last 24 hours.'
  consumes:
  - namespace: cw-bedrock
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric
      path: /
      operations:
      - name: get-metric-data
        method: POST
  - namespace: dynamo-bedrock
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
  - namespace: slack-bedrock
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bedrock-model-invocation-monitor.yml

When a critical Dependabot vulnerability alert is raised in a GitHub repository, creates a Jira security ticket, notifies the owning team in Slack, and opens a GitHub issue for tracking.

naftiko: '0.5'
info:
  label: GitHub Dependabot Alert Remediation
  description: When a critical Dependabot vulnerability alert is raised in a GitHub repository, creates a Jira security ticket, notifies the owning team in Slack, and opens a GitHub issue for tracking.
  tags:
  - security
  - devops
  - github
  - jira
  - slack
  - dependabot
capability:
  exposes:
  - type: mcp
    namespace: vuln-ops
    port: 8080
    tools:
    - name: handle-dependabot-alert
      description: Given a GitHub repo and Dependabot alert number, fetch alert details, create a Jira security remediation ticket, open a GitHub tracking issue, and notify the team Slack channel.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format where the Dependabot alert was raised.
      - name: alert_number
        in: body
        type: integer
        description: The Dependabot alert number to process.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the security alert notification.
      steps:
      - name: get-alert
        type: call
        call: github-dep.get-dependabot-alert
        with:
          repo: '{{repo}}'
          alert_number: '{{alert_number}}'
      - name: create-sec-ticket
        type: call
        call: jira-dep.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Dependabot: {{get-alert.dependency_name}} {{get-alert.severity}} in {{repo}}'
          description: 'CVE: {{get-alert.cve_id}}

            Severity: {{get-alert.severity}}

            Fixed in: {{get-alert.fixed_in}}'
      - name: notify-team
        type: call
        call: slack-dep.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Dependabot Alert: {{get-alert.severity}} vulnerability in {{get-alert.dependency_name}} ({{repo}}). CVE: {{get-alert.cve_id}}. Jira: {{create-sec-ticket.key}}'
  consumes:
  - namespace: github-dep
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alert
      path: /repos/{repo}/dependabot/alerts/{alert_number}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-dependabot-alert
        method: GET
  - namespace: jira-dep
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-dep
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-dependabot-alert-remediation.yml

Fetches all users in a specified Okta group, checks each user's last login date against a stale-access threshold, and posts an access review report to the security Slack channel.

naftiko: '0.5'
info:
  label: Okta Access Review Report
  description: Fetches all users in a specified Okta group, checks each user's last login date against a stale-access threshold, and posts an access review report to the security Slack channel.
  tags:
  - identity
  - security
  - okta
  - slack
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: identity-review
    port: 8080
    tools:
    - name: run-access-review
      description: Given an Okta group ID and a stale-threshold in days, list group members, filter for users whose last login exceeds the threshold, and post the stale-access list to Slack.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: The Okta group ID to review member access for.
      - name: stale_threshold_days
        in: body
        type: integer
        description: Number of days without login after which an account is considered stale.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the access review report.
      steps:
      - name: get-group-members
        type: call
        call: okta-review.get-group-users
        with:
          group_id: '{{okta_group_id}}'
      - name: post-review-report
        type: call
        call: slack-review.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Access Review for Okta group {{okta_group_id}}: {{get-group-members.total}} members, {{get-group-members.stale_count}} accounts inactive for more than {{stale_threshold_days}} days.'
  consumes:
  - namespace: okta-review
    type: http
    baseUri: https://amazon.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-users
      path: /groups/{group_id}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: get-group-users
        method: GET
  - namespace: slack-review
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → okta-access-review-report.yml

When a Salesforce subscription account is within 90 days of renewal, automatically creates a renewal opportunity, sets the close date, and assigns it to the account owner.

naftiko: '0.5'
info:
  label: Salesforce Renewal Opportunity Creator
  description: When a Salesforce subscription account is within 90 days of renewal, automatically creates a renewal opportunity, sets the close date, and assigns it to the account owner.
  tags:
  - sales
  - crm
  - salesforce
  - renewal
capability:
  exposes:
  - type: mcp
    namespace: sales-renewal
    port: 8080
    tools:
    - name: create-renewal-opportunity
      description: Given a Salesforce account ID and contract end date, create a renewal opportunity record on the account with a 90-day close target and assign it to the account owner.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID of the customer approaching renewal.
      - name: contract_end_date
        in: body
        type: string
        description: The contract end date in YYYY-MM-DD format used to set the renewal opportunity close date.
      - name: renewal_amount
        in: body
        type: number
        description: The expected renewal contract value in USD.
      steps:
      - name: get-account
        type: call
        call: salesforce-renewal.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-opportunity
        type: call
        call: salesforce-renewal.create-opportunity
        with:
          account_id: '{{account_id}}'
          name: 'Renewal: {{get-account.name}}'
          close_date: '{{contract_end_date}}'
          stage_name: Renewal
          amount: '{{renewal_amount}}'
          owner_id: '{{get-account.owner_id}}'
  consumes:
  - namespace: salesforce-renewal
    type: http
    baseUri: https://amazon.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
    - name: opportunity
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
Open in Framework → View in Fleet → salesforce-renewal-opportunity-creator.yml

Queries Snowflake for long-running or expensive queries over the past 24 hours and publishes a performance digest to the data-platform Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Query Performance Digest
  description: Queries Snowflake for long-running or expensive queries over the past 24 hours and publishes a performance digest to the data-platform Slack channel.
  tags:
  - data
  - analytics
  - reporting
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-reporting
    port: 8080
    tools:
    - name: digest-query-performance
      description: Query the Snowflake QUERY_HISTORY view for the top expensive queries in the last 24 hours and post a performance digest to Slack. Invoke for daily data-platform health review.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: The Snowflake virtual warehouse name to analyze, e.g. COMPUTE_WH.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID where the performance digest will be posted.
      steps:
      - name: get-query-history
        type: call
        call: snowflake-perf.get-query-history
        with:
          warehouse_name: '{{warehouse_name}}'
      - name: post-digest
        type: call
        call: slack-perf.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Snowflake Query Digest (24h) for {{warehouse_name}}: {{get-query-history.total_queries}} queries, avg execution: {{get-query-history.avg_execution_ms}}ms, credits used: {{get-query-history.credits_used}}.'
  consumes:
  - namespace: snowflake-perf
    type: http
    baseUri: https://amazon.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: query-history
      path: /queries/history
      inputParameters:
      - name: warehouse_name
        in: query
      operations:
      - name: get-query-history
        method: GET
  - namespace: slack-perf
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-query-performance-digest.yml

Monitors Athena query execution costs by tracking data scanned, logs expensive queries to DynamoDB, and alerts the data team via Slack.

naftiko: '0.5'
info:
  label: Athena Query Cost Tracker
  description: Monitors Athena query execution costs by tracking data scanned, logs expensive queries to DynamoDB, and alerts the data team via Slack.
  tags:
  - cloud
  - analytics
  - cost-management
  - aws
  - athena
  - dynamodb
  - slack
capability:
  exposes:
  - type: mcp
    namespace: athena-cost
    port: 8080
    tools:
    - name: track-query-cost
      description: Check an Athena query execution for data scanned, log expensive queries, and alert the data team.
      inputParameters:
      - name: query_execution_id
        in: body
        type: string
        description: The Athena query execution ID to track.
      - name: cost_threshold_gb
        in: body
        type: number
        description: Data scanned threshold in GB that triggers an alert.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for data cost alerts.
      steps:
      - name: get-query-execution
        type: call
        call: athena-api.get-query-execution
        with:
          query_execution_id: '{{query_execution_id}}'
      - name: log-expensive-query
        type: call
        call: dynamo-athena.put-item
        with:
          table_name: athena-cost-tracking
          query_id: '{{query_execution_id}}'
          data_scanned_bytes: '{{get-query-execution.data_scanned}}'
          status: '{{get-query-execution.status}}'
      - name: alert-team
        type: call
        call: slack-athena.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Athena Cost Alert: Query {{query_execution_id}} scanned {{get-query-execution.data_scanned}} bytes. Status: {{get-query-execution.status}}.'
  consumes:
  - namespace: athena-api
    type: http
    baseUri: https://athena.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_athena_token
      placement: header
    resources:
    - name: query
      path: /
      operations:
      - name: get-query-execution
        method: POST
  - namespace: dynamo-athena
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
  - namespace: slack-athena
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → athena-query-cost-tracker.yml

When a Salesforce opportunity moves to Closed Won, creates a Jira epic for the delivery team and posts a handoff notification to the sales Slack channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Sync to Jira
  description: When a Salesforce opportunity moves to Closed Won, creates a Jira epic for the delivery team and posts a handoff notification to the sales Slack channel.
  tags:
  - sales
  - crm
  - salesforce
  - jira
  - slack
  - opportunity
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: sync-opportunity-to-delivery
      description: Given a Salesforce opportunity ID, fetch opportunity details, create a Jira epic for the delivery team, and post a handoff message in Slack. Invoke when an opportunity is marked Closed Won.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID for the closed-won deal, e.g. 0065g00000XYZ.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key where the delivery epic should be created.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID to post the sales-to-delivery handoff message.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-epic
        type: call
        call: jira-sales.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Epic
          summary: 'Delivery: {{get-opportunity.name}}'
          description: 'Account: {{get-opportunity.account_name}}

            Value: {{get-opportunity.amount}}

            Close Date: {{get-opportunity.close_date}}'
      - name: post-handoff
        type: call
        call: slack-sales.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Closed Won: {{get-opportunity.name}} ({{get-opportunity.amount}}). Delivery epic created: {{create-epic.key}}'
  consumes:
  - namespace: salesforce
    type: http
    baseUri: https://amazon.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunity
      path: /sobjects/Opportunity/{opportunity_id}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - namespace: jira-sales
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-sales
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-sync-to-jira.yml

Validates EventBridge rules are actively triggering by checking CloudWatch invocation metrics and posts a health report to Slack.

naftiko: '0.5'
info:
  label: EventBridge Rule Health Checker
  description: Validates EventBridge rules are actively triggering by checking CloudWatch invocation metrics and posts a health report to Slack.
  tags:
  - cloud
  - event-driven
  - monitoring
  - aws
  - eventbridge
  - cloudwatch
  - slack
capability:
  exposes:
  - type: mcp
    namespace: eb-health
    port: 8080
    tools:
    - name: check-rule-health
      description: Check EventBridge rule invocation metrics and report health status to Slack.
      inputParameters:
      - name: rule_name
        in: body
        type: string
        description: The EventBridge rule name to check.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for health reports.
      steps:
      - name: get-invocation-count
        type: call
        call: cw-eb.get-metric-data
        with:
          namespace: AWS/Events
          metric_name: Invocations
          rule_name: '{{rule_name}}'
      - name: get-failed-count
        type: call
        call: cw-eb.get-failed-metric
        with:
          namespace: AWS/Events
          metric_name: FailedInvocations
          rule_name: '{{rule_name}}'
      - name: post-report
        type: call
        call: slack-eb.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'EventBridge Rule Health: {{rule_name}} - Invocations: {{get-invocation-count.sum}}, Failed: {{get-failed-count.sum}}.'
  consumes:
  - namespace: cw-eb
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric
      path: /
      operations:
      - name: get-metric-data
        method: POST
      - name: get-failed-metric
        method: POST
  - namespace: slack-eb
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → eventbridge-rule-health-checker.yml

Syncs content from Confluence into an Amazon Q knowledge base index, triggers a re-index, and posts sync status to Slack.

naftiko: '0.5'
info:
  label: Amazon Q Knowledge Base Sync
  description: Syncs content from Confluence into an Amazon Q knowledge base index, triggers a re-index, and posts sync status to Slack.
  tags:
  - ai
  - knowledge-management
  - aws
  - amazon-q
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: q-kb-sync
    port: 8080
    tools:
    - name: sync-knowledge-base
      description: Pull content from Confluence, sync it to an Amazon Q knowledge base, and report status to Slack.
      inputParameters:
      - name: confluence_space
        in: body
        type: string
        description: The Confluence space key to sync from.
      - name: index_id
        in: body
        type: string
        description: The Amazon Q index ID to sync to.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for sync notifications.
      steps:
      - name: get-space-content
        type: call
        call: confluence-q.get-space-content
        with:
          space_key: '{{confluence_space}}'
      - name: start-sync
        type: call
        call: q-api.start-data-source-sync
        with:
          index_id: '{{index_id}}'
          data_source_id: confluence-{{confluence_space}}
      - name: notify-sync
        type: call
        call: slack-q.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Amazon Q KB Sync started for index {{index_id}} from Confluence space {{confluence_space}}. Sync execution: {{start-sync.execution_id}}.'
  consumes:
  - namespace: confluence-q
    type: http
    baseUri: https://amazon.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: space
      path: /space/{space_key}/content
      inputParameters:
      - name: space_key
        in: path
      operations:
      - name: get-space-content
        method: GET
  - namespace: q-api
    type: http
    baseUri: https://qbusiness.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_q_token
      placement: header
    resources:
    - name: data-source-sync
      path: /applications/{index_id}/data-sources/{data_source_id}/sync
      inputParameters:
      - name: index_id
        in: path
      - name: data_source_id
        in: path
      operations:
      - name: start-data-source-sync
        method: POST
  - namespace: slack-q
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → amazon-q-knowledge-base-sync.yml

Orchestrates a production deployment by triggering a GitHub Actions workflow, creating a Datadog deployment marker, and posting a status notification to the Slack deployments channel.

naftiko: '0.5'
info:
  label: Production Deployment Rollout
  description: Orchestrates a production deployment by triggering a GitHub Actions workflow, creating a Datadog deployment marker, and posting a status notification to the Slack deployments channel.
  tags:
  - devops
  - deployment
  - github
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops-deploy
    port: 8080
    tools:
    - name: trigger-production-deploy
      description: Given a service name, version tag, and target environment, trigger a GitHub Actions deployment workflow, register a Datadog deployment marker, and notify the Slack deployments channel.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format to deploy from.
      - name: version_tag
        in: body
        type: string
        description: The git tag or commit SHA to deploy, e.g. v2.4.1.
      - name: environment
        in: body
        type: string
        description: 'The target deployment environment: production, staging, or canary.'
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID to post deployment status to.
      steps:
      - name: trigger-workflow
        type: call
        call: github-deploy.trigger-workflow
        with:
          repo: '{{repo}}'
          ref: '{{version_tag}}'
          workflow_id: deploy.yml
          inputs: '{"environment":"{{environment}}"}'
      - name: mark-deployment
        type: call
        call: datadog-deploy.create-event
        with:
          title: 'Deployment: {{repo}} {{version_tag}} to {{environment}}'
          text: Workflow run triggered via Naftiko.
          alert_type: info
      - name: notify-channel
        type: call
        call: slack-deploy.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Deployment started: {{repo}} @ {{version_tag}} to {{environment}}.'
  consumes:
  - namespace: github-deploy
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-dispatch
      path: /repos/{repo}/actions/workflows/{workflow_id}/dispatches
      inputParameters:
      - name: repo
        in: path
      - name: workflow_id
        in: path
      operations:
      - name: trigger-workflow
        method: POST
  - namespace: datadog-deploy
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: event
      path: /events
      operations:
      - name: create-event
        method: POST
  - namespace: slack-deploy
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → production-deployment-rollout.yml

Audits all Okta users in a specified group to identify those without MFA enrolled, posts a remediation report to the security Slack channel, and creates a Jira compliance task.

naftiko: '0.5'
info:
  label: Okta MFA Enforcement Audit
  description: Audits all Okta users in a specified group to identify those without MFA enrolled, posts a remediation report to the security Slack channel, and creates a Jira compliance task.
  tags:
  - security
  - identity
  - okta
  - compliance
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: mfa-audit
    port: 8080
    tools:
    - name: audit-mfa-enrollment
      description: Given an Okta group ID, list all users and check MFA enrollment status. Post a list of non-compliant users to the security Slack channel and create a Jira compliance task.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: The Okta group ID to audit for MFA enrollment compliance.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the MFA compliance report.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for the compliance tracking task.
      steps:
      - name: get-group-users
        type: call
        call: okta-mfa.get-group-users
        with:
          group_id: '{{okta_group_id}}'
      - name: create-compliance-task
        type: call
        call: jira-mfa.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: 'MFA audit: {{get-group-users.non_mfa_count}} users without MFA in group {{okta_group_id}}'
          description: 'Non-compliant users: {{get-group-users.non_mfa_count}} out of {{get-group-users.total}}'
      - name: post-mfa-report
        type: call
        call: slack-mfa.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'MFA Audit: {{get-group-users.non_mfa_count}} / {{get-group-users.total}} users in group {{okta_group_id}} lack MFA. Jira: {{create-compliance-task.key}}'
  consumes:
  - namespace: okta-mfa
    type: http
    baseUri: https://amazon.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-users
      path: /groups/{group_id}/users
      inputParameters:
      - name: group_id
        in: path
      operations:
      - name: get-group-users
        method: GET
  - namespace: jira-mfa
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-mfa
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → okta-mfa-enforcement-audit.yml

Calculates estimated delivery time for an Amazon order using logistics data and warehouse location, then updates the order with the delivery estimate.

naftiko: '0.5'
info:
  label: Delivery ETA Estimator
  description: Calculates estimated delivery time for an Amazon order using logistics data and warehouse location, then updates the order with the delivery estimate.
  tags:
  - ecommerce
  - logistics
  - delivery
  - fulfillment
capability:
  exposes:
  - type: mcp
    namespace: delivery-eta
    port: 8080
    tools:
    - name: estimate-delivery
      description: Calculate delivery ETA for an order using warehouse location and destination, then update the order with the estimate.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Amazon order ID to estimate delivery for.
      - name: destination_zip
        in: body
        type: string
        description: The destination ZIP code.
      steps:
      - name: get-order-warehouse
        type: call
        call: logistics-api.get-fulfillment-center
        with:
          order_id: '{{order_id}}'
      - name: calculate-eta
        type: call
        call: logistics-api.calculate-transit-time
        with:
          origin_zip: '{{get-order-warehouse.warehouse_zip}}'
          destination_zip: '{{destination_zip}}'
          shipping_method: '{{get-order-warehouse.shipping_method}}'
      - name: update-order-eta
        type: call
        call: logistics-api.update-delivery-estimate
        with:
          order_id: '{{order_id}}'
          estimated_delivery: '{{calculate-eta.estimated_date}}'
  consumes:
  - namespace: logistics-api
    type: http
    baseUri: https://api.amazon.com/logistics/v1
    authentication:
      type: bearer
      token: $secrets.amazon_logistics_token
    resources:
    - name: fulfillment-center
      path: /orders/{order_id}/fulfillment-center
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-fulfillment-center
        method: GET
    - name: transit-time
      path: /transit-time/calculate
      operations:
      - name: calculate-transit-time
        method: POST
    - name: delivery-estimate
      path: /orders/{order_id}/delivery-estimate
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: update-delivery-estimate
        method: PUT
Open in Framework → View in Fleet → delivery-eta-estimator.yml

Detects Prime delivery delays by checking shipment tracking, creates a support ticket in ServiceNow, and sends the customer a proactive notification via SES.

naftiko: '0.5'
info:
  label: Prime Delivery Delay Escalation
  description: Detects Prime delivery delays by checking shipment tracking, creates a support ticket in ServiceNow, and sends the customer a proactive notification via SES.
  tags:
  - ecommerce
  - prime
  - logistics
  - customer-service
  - servicenow
  - ses
capability:
  exposes:
  - type: mcp
    namespace: prime-delay
    port: 8080
    tools:
    - name: escalate-delay
      description: Detect a Prime delivery delay, create a ServiceNow ticket, and proactively notify the customer via email.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The order ID with a potential delivery delay.
      - name: customer_email
        in: body
        type: string
        description: The customer email for proactive notification.
      steps:
      - name: check-shipment
        type: call
        call: logistics-delay.get-shipment-tracking
        with:
          order_id: '{{order_id}}'
      - name: create-ticket
        type: call
        call: servicenow-delay.create-incident
        with:
          short_description: 'Prime Delivery Delay: Order {{order_id}}'
          description: 'Shipment {{check-shipment.tracking_id}} delayed. Current status: {{check-shipment.status}}. Expected: {{check-shipment.expected_date}}.'
      - name: notify-customer
        type: call
        call: ses-delay.send-email
        with:
          to: '{{customer_email}}'
          subject: Update on your Amazon order {{order_id}}
          body: 'We noticed a delay with your order. Current status: {{check-shipment.status}}. New estimated delivery: {{check-shipment.revised_date}}. We apologize for the inconvenience.'
  consumes:
  - namespace: logistics-delay
    type: http
    baseUri: https://api.amazon.com/logistics/v1
    authentication:
      type: bearer
      token: $secrets.amazon_logistics_token
    resources:
    - name: tracking
      path: /orders/{order_id}/tracking
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-shipment-tracking
        method: GET
  - namespace: servicenow-delay
    type: http
    baseUri: https://amazon.service-now.com/api/now/table
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /incident
      operations:
      - name: create-incident
        method: POST
  - namespace: ses-delay
    type: http
    baseUri: https://email.us-east-1.amazonaws.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ses_token
      placement: header
    resources:
    - name: email
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → prime-delivery-delay-escalation.yml

Checks the current EKS cluster version, compares with available Kubernetes versions, and generates an upgrade plan posted to Confluence and Slack.

naftiko: '0.5'
info:
  label: EKS Cluster Upgrade Planner
  description: Checks the current EKS cluster version, compares with available Kubernetes versions, and generates an upgrade plan posted to Confluence and Slack.
  tags:
  - cloud
  - kubernetes
  - aws
  - eks
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: eks-upgrade
    port: 8080
    tools:
    - name: plan-upgrade
      description: Check EKS cluster version, identify available upgrades, and post an upgrade plan to Confluence and Slack.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: The EKS cluster name to check.
      - name: confluence_space
        in: body
        type: string
        description: Confluence space key for the upgrade plan.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for upgrade notifications.
      steps:
      - name: describe-cluster
        type: call
        call: eks-api.describe-cluster
        with:
          cluster_name: '{{cluster_name}}'
      - name: create-plan-page
        type: call
        call: confluence-eks.create-page
        with:
          space_key: '{{confluence_space}}'
          title: 'EKS Upgrade Plan: {{cluster_name}}'
          body: 'Current version: {{describe-cluster.version}}. Cluster status: {{describe-cluster.status}}. Review add-on compatibility before upgrading.'
      - name: notify-team
        type: call
        call: slack-eks.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'EKS Upgrade Plan created for {{cluster_name}} (current: v{{describe-cluster.version}}). Confluence: {{create-plan-page.url}}'
  consumes:
  - namespace: eks-api
    type: http
    baseUri: https://eks.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_eks_token
      placement: header
    resources:
    - name: cluster
      path: /clusters/{cluster_name}
      inputParameters:
      - name: cluster_name
        in: path
      operations:
      - name: describe-cluster
        method: GET
  - namespace: confluence-eks
    type: http
    baseUri: https://amazon.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: page
      path: /content
      operations:
      - name: create-page
        method: POST
  - namespace: slack-eks
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → eks-cluster-upgrade-planner.yml

Retrieves performance metrics for an Amazon Advertising campaign including impressions, clicks, and spend.

naftiko: '0.5'
info:
  label: Advertising Campaign Metrics
  description: Retrieves performance metrics for an Amazon Advertising campaign including impressions, clicks, and spend.
  tags:
  - advertising
  - marketing
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: ads-metrics
    port: 8080
    tools:
    - name: get-campaign-metrics
      description: Fetch performance metrics for a given Amazon Advertising campaign. Returns impressions, clicks, CTR, and spend.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Amazon Advertising campaign ID to retrieve metrics for.
      - name: date_range
        in: body
        type: string
        description: The date range for metrics, e.g. last-7-days.
      call: ads-api.get-campaign-report
      with:
        campaign_id: '{{campaign_id}}'
        date_range: '{{date_range}}'
      outputParameters:
      - name: impressions
        type: number
        mapping: $.metrics.impressions
      - name: clicks
        type: number
        mapping: $.metrics.clicks
      - name: spend
        type: number
        mapping: $.metrics.cost
  consumes:
  - namespace: ads-api
    type: http
    baseUri: https://advertising-api.amazon.com/v3
    authentication:
      type: bearer
      token: $secrets.amazon_ads_token
    resources:
    - name: campaigns
      path: /campaigns/{campaign_id}/report
      inputParameters:
      - name: campaign_id
        in: path
      - name: date_range
        in: query
      operations:
      - name: get-campaign-report
        method: GET
Open in Framework → View in Fleet → advertising-campaign-metrics.yml

Audits a GitHub repository for branch protection rules, required status checks, and code owner file presence, then posts a compliance report to a Slack channel.

naftiko: '0.5'
info:
  label: GitHub Repository Compliance Audit
  description: Audits a GitHub repository for branch protection rules, required status checks, and code owner file presence, then posts a compliance report to a Slack channel.
  tags:
  - devops
  - compliance
  - github
  - slack
  - security
capability:
  exposes:
  - type: mcp
    namespace: devops-compliance
    port: 8080
    tools:
    - name: audit-repo-compliance
      description: Given a GitHub repository name, check branch protection rules on the default branch, verify required status checks are configured, and post a compliance status report to Slack.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format to audit, e.g. amzn/service-catalog.
      - name: branch
        in: body
        type: string
        description: The branch to check protection rules on, typically main or master.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID where the compliance report will be posted.
      steps:
      - name: get-branch-protection
        type: call
        call: github-compliance.get-branch-protection
        with:
          repo: '{{repo}}'
          branch: '{{branch}}'
      - name: post-compliance-report
        type: call
        call: slack-compliance.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Compliance Audit: {{repo}} / {{branch}} | Required reviews: {{get-branch-protection.required_approving_review_count}} | Status checks required: {{get-branch-protection.required_status_checks_count}} | Admin enforced: {{get-branch-protection.enforce_admins}}'
  consumes:
  - namespace: github-compliance
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branch-protection
      path: /repos/{repo}/branches/{branch}/protection
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch-protection
        method: GET
  - namespace: slack-compliance
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-repository-compliance-audit.yml

Creates a CloudFront cache invalidation after a deployment, monitors its completion, and notifies the engineering team via Slack.

naftiko: '0.5'
info:
  label: CloudFront Cache Invalidation Workflow
  description: Creates a CloudFront cache invalidation after a deployment, monitors its completion, and notifies the engineering team via Slack.
  tags:
  - cloud
  - cdn
  - deployment
  - aws
  - cloudfront
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cf-invalidation
    port: 8080
    tools:
    - name: invalidate-and-notify
      description: Create a CloudFront cache invalidation for specified paths, check completion status, and notify the team via Slack.
      inputParameters:
      - name: distribution_id
        in: body
        type: string
        description: The CloudFront distribution ID to invalidate.
      - name: paths
        in: body
        type: string
        description: Comma-separated list of paths to invalidate, e.g. /index.html,/assets/*.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for invalidation notifications.
      steps:
      - name: create-invalidation
        type: call
        call: cf-api.create-invalidation
        with:
          distribution_id: '{{distribution_id}}'
          paths: '{{paths}}'
      - name: check-status
        type: call
        call: cf-api.get-invalidation
        with:
          distribution_id: '{{distribution_id}}'
          invalidation_id: '{{create-invalidation.invalidation_id}}'
      - name: notify-team
        type: call
        call: slack-cf.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'CloudFront Invalidation {{create-invalidation.invalidation_id}} for distribution {{distribution_id}}: Status {{check-status.status}}. Paths: {{paths}}'
  consumes:
  - namespace: cf-api
    type: http
    baseUri: https://cloudfront.amazonaws.com/2020-05-31
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudfront_token
      placement: header
    resources:
    - name: invalidation
      path: /distribution/{distribution_id}/invalidation
      inputParameters:
      - name: distribution_id
        in: path
      - name: paths
        in: body
      operations:
      - name: create-invalidation
        method: POST
    - name: invalidation-status
      path: /distribution/{distribution_id}/invalidation/{invalidation_id}
      inputParameters:
      - name: distribution_id
        in: path
      - name: invalidation_id
        in: path
      operations:
      - name: get-invalidation
        method: GET
  - namespace: slack-cf
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloudfront-cache-invalidation-workflow.yml

Checks the Prime membership status for a customer account and returns subscription tier and renewal date.

naftiko: '0.5'
info:
  label: Prime Membership Status Lookup
  description: Checks the Prime membership status for a customer account and returns subscription tier and renewal date.
  tags:
  - ecommerce
  - prime
  - customer
capability:
  exposes:
  - type: mcp
    namespace: prime-membership
    port: 8080
    tools:
    - name: get-membership-status
      description: Look up the Prime membership status for a given customer ID. Returns tier, renewal date, and benefit details.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The Amazon customer ID to look up Prime status for.
      call: prime-api.get-membership
      with:
        customer_id: '{{customer_id}}'
      outputParameters:
      - name: tier
        type: string
        mapping: $.membership.tier
      - name: renewal_date
        type: string
        mapping: $.membership.renewalDate
  consumes:
  - namespace: prime-api
    type: http
    baseUri: https://api.amazon.com/prime/v1
    authentication:
      type: bearer
      token: $secrets.amazon_prime_token
    resources:
    - name: membership
      path: /memberships/{customer_id}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-membership
        method: GET
Open in Framework → View in Fleet → prime-membership-status-lookup.yml

When a GitHub pull request is opened against a main branch, triggers a Snyk security scan and posts the results as a PR comment. Blocks merge if critical vulnerabilities are detected.

naftiko: '0.5'
info:
  label: GitHub PR Security Scan Gate
  description: When a GitHub pull request is opened against a main branch, triggers a Snyk security scan and posts the results as a PR comment. Blocks merge if critical vulnerabilities are detected.
  tags:
  - devops
  - security
  - github
  - snyk
  - code-quality
capability:
  exposes:
  - type: mcp
    namespace: devops-security
    port: 8080
    tools:
    - name: run-pr-security-scan
      description: Given a GitHub repo and PR number, trigger a Snyk security scan on the PR branch and post scan results as a GitHub PR review comment. Use when enforcing security gates on pull requests.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format, e.g. amzn/service-catalog.
      - name: pr_number
        in: body
        type: integer
        description: The pull request number to scan and comment on.
      - name: branch
        in: body
        type: string
        description: The branch name associated with the pull request.
      steps:
      - name: trigger-scan
        type: call
        call: snyk.test-project
        with:
          org: amazon
          target_reference: '{{branch}}'
      - name: post-review
        type: call
        call: github-sec.create-pr-review
        with:
          repo: '{{repo}}'
          pull_number: '{{pr_number}}'
          body: 'Snyk scan complete. Issues found: {{trigger-scan.issue_count}}. Critical: {{trigger-scan.critical_count}}. See full report: {{trigger-scan.report_url}}'
          event: COMMENT
  consumes:
  - namespace: snyk
    type: http
    baseUri: https://api.snyk.io/rest
    authentication:
      type: bearer
      token: $secrets.snyk_token
    resources:
    - name: project-test
      path: /orgs/{org}/test
      inputParameters:
      - name: org
        in: path
      operations:
      - name: test-project
        method: POST
  - namespace: github-sec
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pr-review
      path: /repos/{repo}/pulls/{pull_number}/reviews
      inputParameters:
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: create-pr-review
        method: POST
Open in Framework → View in Fleet → github-pr-security-scan-gate.yml

Deploys a new Lambda function version, runs a smoke test, and rolls back to the previous version if the test fails, notifying the team via Slack.

naftiko: '0.5'
info:
  label: Lambda Deployment with Rollback
  description: Deploys a new Lambda function version, runs a smoke test, and rolls back to the previous version if the test fails, notifying the team via Slack.
  tags:
  - cloud
  - serverless
  - deployment
  - aws
  - lambda
  - slack
capability:
  exposes:
  - type: mcp
    namespace: lambda-deploy
    port: 8080
    tools:
    - name: deploy-with-rollback
      description: Deploy a new Lambda version from S3, invoke a smoke test, and roll back if it fails. Posts deployment status to Slack.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: The Lambda function name to deploy.
      - name: s3_bucket
        in: body
        type: string
        description: The S3 bucket containing the deployment package.
      - name: s3_key
        in: body
        type: string
        description: The S3 key for the deployment package zip.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for deployment notifications.
      steps:
      - name: update-function
        type: call
        call: lambda-dep.update-function-code
        with:
          function_name: '{{function_name}}'
          s3_bucket: '{{s3_bucket}}'
          s3_key: '{{s3_key}}'
      - name: invoke-smoke-test
        type: call
        call: lambda-dep.invoke-function
        with:
          function_name: '{{function_name}}'
          payload: '{"test": true}'
      - name: notify-team
        type: call
        call: slack-dep.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Lambda deployment for {{function_name}}: version {{update-function.version}} deployed. Smoke test status: {{invoke-smoke-test.status_code}}.'
  consumes:
  - namespace: lambda-dep
    type: http
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_lambda_token
      placement: header
    resources:
    - name: function-code
      path: /functions/{function_name}/code
      inputParameters:
      - name: function_name
        in: path
      operations:
      - name: update-function-code
        method: PUT
    - name: invocation
      path: /functions/{function_name}/invocations
      inputParameters:
      - name: function_name
        in: path
      - name: payload
        in: body
      operations:
      - name: invoke-function
        method: POST
  - namespace: slack-dep
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → lambda-deployment-with-rollback.yml

Queries Datadog for SLO burn rate on a target service, and if the burn rate exceeds the threshold, pages PagerDuty and posts a remediation link in Slack.

naftiko: '0.5'
info:
  label: Datadog SLO Burn Rate Alert
  description: Queries Datadog for SLO burn rate on a target service, and if the burn rate exceeds the threshold, pages PagerDuty and posts a remediation link in Slack.
  tags:
  - observability
  - slo
  - datadog
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slo-ops
    port: 8080
    tools:
    - name: handle-slo-burn-alert
      description: Given a Datadog SLO ID and burn rate threshold, check the current SLO burn rate and if it exceeds the threshold, page PagerDuty and alert the Slack ops channel with the SLO status and a remediation link.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: The Datadog SLO ID to check the burn rate for.
      - name: burn_rate_threshold
        in: body
        type: number
        description: The burn rate multiplier above which an alert is triggered, e.g. 14.4 for a 1-hour burn window.
      - name: pagerduty_service_key
        in: body
        type: string
        description: The PagerDuty integration service key for routing the SLO burn alert.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the SLO burn notification.
      steps:
      - name: get-slo
        type: call
        call: datadog-slo.get-slo
        with:
          slo_id: '{{slo_id}}'
      - name: page-oncall
        type: call
        call: pagerduty-slo.create-incident
        with:
          service_key: '{{pagerduty_service_key}}'
          description: 'SLO burn rate alert: {{get-slo.name}} burn rate = {{get-slo.burn_rate}}'
          incident_key: slo-{{slo_id}}
      - name: post-slo-alert
        type: call
        call: slack-slo.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'SLO BURN ALERT: {{get-slo.name}} | Burn rate: {{get-slo.burn_rate}} (threshold: {{burn_rate_threshold}}) | Remaining error budget: {{get-slo.error_budget_remaining}}%'
  consumes:
  - namespace: datadog-slo
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slo
      path: /slo/{slo_id}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo
        method: GET
  - namespace: pagerduty-slo
    type: http
    baseUri: https://events.pagerduty.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incident
      path: /enqueue
      operations:
      - name: create-incident
        method: POST
  - namespace: slack-slo
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-burn-rate-alert.yml

Translates Amazon product listing content using Amazon Translate, updates the listing for the target marketplace, and logs the translation to DynamoDB.

naftiko: '0.5'
info:
  label: Translate Product Listing Localizer
  description: Translates Amazon product listing content using Amazon Translate, updates the listing for the target marketplace, and logs the translation to DynamoDB.
  tags:
  - ecommerce
  - localization
  - aws
  - translate
  - marketplace
  - dynamodb
capability:
  exposes:
  - type: mcp
    namespace: listing-translate
    port: 8080
    tools:
    - name: localize-listing
      description: Translate a product listing to a target language, update the marketplace listing, and log the translation.
      inputParameters:
      - name: asin
        in: body
        type: string
        description: The ASIN of the product to translate.
      - name: source_language
        in: body
        type: string
        description: Source language code, e.g. en.
      - name: target_language
        in: body
        type: string
        description: Target language code, e.g. de.
      steps:
      - name: get-listing
        type: call
        call: sp-translate.get-listing
        with:
          asin: '{{asin}}'
      - name: translate-content
        type: call
        call: translate-api.translate-text
        with:
          text: '{{get-listing.title}} | {{get-listing.description}}'
          source_language: '{{source_language}}'
          target_language: '{{target_language}}'
      - name: log-translation
        type: call
        call: dynamo-translate.put-item
        with:
          table_name: listing-translations
          asin: '{{asin}}'
          target_language: '{{target_language}}'
          translated_text: '{{translate-content.translated_text}}'
  consumes:
  - namespace: sp-translate
    type: http
    baseUri: https://sellingpartnerapi-na.amazon.com
    authentication:
      type: bearer
      token: $secrets.sp_api_token
    resources:
    - name: listing
      path: /listings/2021-08-01/items/ATVPDKIKX0DER/{asin}
      inputParameters:
      - name: asin
        in: path
      operations:
      - name: get-listing
        method: GET
  - namespace: translate-api
    type: http
    baseUri: https://translate.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_translate_token
      placement: header
    resources:
    - name: translate
      path: /
      operations:
      - name: translate-text
        method: POST
  - namespace: dynamo-translate
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
Open in Framework → View in Fleet → translate-product-listing-localizer.yml

Monitors Amazon Advertising campaign spend against budget thresholds, pauses overspending campaigns, and notifies the marketing team via Slack.

naftiko: '0.5'
info:
  label: Advertising Spend Anomaly Detector
  description: Monitors Amazon Advertising campaign spend against budget thresholds, pauses overspending campaigns, and notifies the marketing team via Slack.
  tags:
  - advertising
  - finops
  - cost-management
  - marketing
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ads-anomaly
    port: 8080
    tools:
    - name: detect-spend-anomaly
      description: Check advertising campaign spend against budget, pause campaigns exceeding threshold, and alert the marketing team.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Amazon Advertising campaign ID to monitor.
      - name: budget_threshold
        in: body
        type: number
        description: The daily budget threshold in USD.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for marketing alerts.
      steps:
      - name: get-spend
        type: call
        call: ads-spend.get-campaign-spend
        with:
          campaign_id: '{{campaign_id}}'
      - name: pause-campaign
        type: call
        call: ads-spend.update-campaign-status
        with:
          campaign_id: '{{campaign_id}}'
          status: PAUSED
      - name: alert-team
        type: call
        call: slack-ads.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Spend Alert: Campaign {{campaign_id}} spend ${{get-spend.daily_spend}} exceeded budget ${{budget_threshold}}. Campaign paused.'
  consumes:
  - namespace: ads-spend
    type: http
    baseUri: https://advertising-api.amazon.com/v3
    authentication:
      type: bearer
      token: $secrets.amazon_ads_token
    resources:
    - name: campaign-spend
      path: /campaigns/{campaign_id}/spend
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-spend
        method: GET
    - name: campaign-status
      path: /campaigns/{campaign_id}
      inputParameters:
      - name: campaign_id
        in: path
      - name: status
        in: body
      operations:
      - name: update-campaign-status
        method: PUT
  - namespace: slack-ads
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → advertising-spend-anomaly-detector.yml

Analyzes a product listing on Amazon Marketplace for SEO quality, fetches competitor pricing, and suggests optimized title and keywords to a Slack channel.

naftiko: '0.5'
info:
  label: Seller Product Listing Optimizer
  description: Analyzes a product listing on Amazon Marketplace for SEO quality, fetches competitor pricing, and suggests optimized title and keywords to a Slack channel.
  tags:
  - ecommerce
  - marketplace
  - seo
  - seller-central
  - slack
capability:
  exposes:
  - type: mcp
    namespace: listing-optimizer
    port: 8080
    tools:
    - name: optimize-listing
      description: Analyze a marketplace product listing, compare with competitor pricing, and post optimization suggestions to Slack.
      inputParameters:
      - name: asin
        in: body
        type: string
        description: The ASIN of the product listing to optimize.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to post optimization suggestions.
      steps:
      - name: get-listing
        type: call
        call: sp-listing.get-listing
        with:
          asin: '{{asin}}'
      - name: get-competitive-pricing
        type: call
        call: sp-listing.get-competitive-pricing
        with:
          asin: '{{asin}}'
      - name: post-suggestions
        type: call
        call: slack-listing.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Listing Optimization for ASIN {{asin}}:

            Current title: {{get-listing.title}}

            Your price: {{get-listing.price}}

            Lowest competitor: {{get-competitive-pricing.lowest_price}}

            Suggestion: Review keywords and consider competitive repricing.'
  consumes:
  - namespace: sp-listing
    type: http
    baseUri: https://sellingpartnerapi-na.amazon.com
    authentication:
      type: bearer
      token: $secrets.sp_api_token
    resources:
    - name: listing
      path: /listings/2021-08-01/items/ATVPDKIKX0DER/{asin}
      inputParameters:
      - name: asin
        in: path
      operations:
      - name: get-listing
        method: GET
    - name: competitive-pricing
      path: /products/pricing/v0/competitivePrice
      inputParameters:
      - name: asin
        in: query
      operations:
      - name: get-competitive-pricing
        method: GET
  - namespace: slack-listing
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → seller-product-listing-optimizer.yml

Triggers a Terraform Cloud plan run on a workspace to detect infrastructure drift, posts the plan summary to a Slack channel, and creates a Jira task if drift is found.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Drift Detector
  description: Triggers a Terraform Cloud plan run on a workspace to detect infrastructure drift, posts the plan summary to a Slack channel, and creates a Jira task if drift is found.
  tags:
  - cloud
  - infrastructure
  - terraform
  - jira
  - slack
  - drift-detection
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: detect-infra-drift
      description: Given a Terraform Cloud organization and workspace name, trigger a speculative plan run to detect infrastructure drift, and if drift is found, create a Jira task and alert Slack.
      inputParameters:
      - name: terraform_org
        in: body
        type: string
        description: The Terraform Cloud organization name, e.g. amazon-infra.
      - name: workspace_name
        in: body
        type: string
        description: The Terraform workspace name to run the drift-detection plan on.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the drift-detection alert.
      steps:
      - name: trigger-plan
        type: call
        call: terraform.create-run
        with:
          organization: '{{terraform_org}}'
          workspace_name: '{{workspace_name}}'
          plan_only: 'true'
      - name: create-drift-ticket
        type: call
        call: jira-infra.create-issue
        with:
          project_key: INFRA
          issuetype: Task
          summary: Infrastructure drift detected in {{workspace_name}}
          description: 'Terraform plan run ID: {{trigger-plan.run_id}}. Review and apply changes.'
      - name: notify-infra-team
        type: call
        call: slack-infra.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Infra Drift Detected: workspace {{workspace_name}} | Terraform run: {{trigger-plan.run_id}} | Jira: {{create-drift-ticket.key}}'
  consumes:
  - namespace: terraform
    type: http
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: run
      path: /runs
      operations:
      - name: create-run
        method: POST
  - namespace: jira-infra
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-infra
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → terraform-infrastructure-drift-detector.yml

Creates an on-demand RDS database snapshot, checks its completion status, and notifies the DBA team via Slack when ready.

naftiko: '0.5'
info:
  label: RDS Snapshot and Notify
  description: Creates an on-demand RDS database snapshot, checks its completion status, and notifies the DBA team via Slack when ready.
  tags:
  - cloud
  - database
  - backup
  - aws
  - rds
  - slack
capability:
  exposes:
  - type: mcp
    namespace: rds-backup
    port: 8080
    tools:
    - name: snapshot-and-notify
      description: Create an RDS snapshot, verify its status, and notify the DBA team when complete.
      inputParameters:
      - name: db_instance_id
        in: body
        type: string
        description: The RDS database instance identifier.
      - name: snapshot_id
        in: body
        type: string
        description: The desired snapshot identifier.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for DBA notifications.
      steps:
      - name: create-snapshot
        type: call
        call: rds-api.create-db-snapshot
        with:
          db_instance_id: '{{db_instance_id}}'
          snapshot_id: '{{snapshot_id}}'
      - name: check-status
        type: call
        call: rds-api.describe-db-snapshot
        with:
          snapshot_id: '{{snapshot_id}}'
      - name: notify-team
        type: call
        call: slack-rds.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'RDS Snapshot {{snapshot_id}} for {{db_instance_id}}: Status {{check-status.status}}. Created at {{check-status.created_at}}.'
  consumes:
  - namespace: rds-api
    type: http
    baseUri: https://rds.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_rds_token
      placement: header
    resources:
    - name: snapshot
      path: /
      operations:
      - name: create-db-snapshot
        method: POST
      - name: describe-db-snapshot
        method: GET
  - namespace: slack-rds
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → rds-snapshot-and-notify.yml

Describes a Kinesis data stream and returns its shard count, retention period, and status.

naftiko: '0.5'
info:
  label: Kinesis Stream Description
  description: Describes a Kinesis data stream and returns its shard count, retention period, and status.
  tags:
  - cloud
  - streaming
  - aws
  - kinesis
capability:
  exposes:
  - type: mcp
    namespace: kinesis-desc
    port: 8080
    tools:
    - name: describe-stream
      description: Describe a Kinesis data stream to get shard count, retention period, and current status.
      inputParameters:
      - name: stream_name
        in: body
        type: string
        description: The name of the Kinesis stream to describe.
      call: kinesis-api.describe-stream
      with:
        stream_name: '{{stream_name}}'
      outputParameters:
      - name: shard_count
        type: number
        mapping: $.StreamDescription.Shards.length
      - name: status
        type: string
        mapping: $.StreamDescription.StreamStatus
  consumes:
  - namespace: kinesis-api
    type: http
    baseUri: https://kinesis.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_kinesis_token
      placement: header
    resources:
    - name: stream
      path: /
      inputParameters:
      - name: stream_name
        in: body
      operations:
      - name: describe-stream
        method: POST
Open in Framework → View in Fleet → kinesis-stream-description.yml

Monitors ECS service CPU utilization via CloudWatch, adjusts the desired task count based on load, and logs the scaling event to DynamoDB.

naftiko: '0.5'
info:
  label: ECS Auto-Scaling Adjuster
  description: Monitors ECS service CPU utilization via CloudWatch, adjusts the desired task count based on load, and logs the scaling event to DynamoDB.
  tags:
  - cloud
  - containers
  - auto-scaling
  - aws
  - ecs
  - cloudwatch
  - dynamodb
capability:
  exposes:
  - type: mcp
    namespace: ecs-scaling
    port: 8080
    tools:
    - name: adjust-scaling
      description: Monitor ECS service CPU, adjust desired task count if needed, and log the scaling event.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: The ECS cluster name.
      - name: service_name
        in: body
        type: string
        description: The ECS service name to scale.
      - name: cpu_threshold
        in: body
        type: number
        description: CPU percentage threshold that triggers scaling.
      - name: desired_count
        in: body
        type: number
        description: The new desired task count to set.
      steps:
      - name: get-cpu-metric
        type: call
        call: cw-ecs.get-metric-data
        with:
          cluster_name: '{{cluster_name}}'
          service_name: '{{service_name}}'
          metric_name: CPUUtilization
      - name: update-service
        type: call
        call: ecs-scale.update-service
        with:
          cluster_name: '{{cluster_name}}'
          service_name: '{{service_name}}'
          desired_count: '{{desired_count}}'
      - name: log-event
        type: call
        call: dynamo-ecs.put-item
        with:
          table_name: ecs-scaling-events
          service_name: '{{service_name}}'
          cpu_avg: '{{get-cpu-metric.average}}'
          new_count: '{{desired_count}}'
  consumes:
  - namespace: cw-ecs
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric
      path: /
      inputParameters:
      - name: cluster_name
        in: query
      - name: service_name
        in: query
      - name: metric_name
        in: query
      operations:
      - name: get-metric-data
        method: POST
  - namespace: ecs-scale
    type: http
    baseUri: https://ecs.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ecs_token
      placement: header
    resources:
    - name: service
      path: /
      operations:
      - name: update-service
        method: POST
  - namespace: dynamo-ecs
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
Open in Framework → View in Fleet → ecs-auto-scaling-adjuster.yml

Fetches the execution history of an AWS Step Functions workflow, summarizes success and failure states, and posts the report to Slack.

naftiko: '0.5'
info:
  label: Step Functions Workflow Status Reporter
  description: Fetches the execution history of an AWS Step Functions workflow, summarizes success and failure states, and posts the report to Slack.
  tags:
  - cloud
  - orchestration
  - aws
  - step-functions
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sfn-reporter
    port: 8080
    tools:
    - name: report-execution-status
      description: Get the execution history for a Step Functions workflow and post a status summary to Slack.
      inputParameters:
      - name: execution_arn
        in: body
        type: string
        description: The Step Functions execution ARN to report on.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for the status report.
      steps:
      - name: get-execution
        type: call
        call: sfn-api.describe-execution
        with:
          execution_arn: '{{execution_arn}}'
      - name: get-history
        type: call
        call: sfn-api.get-execution-history
        with:
          execution_arn: '{{execution_arn}}'
      - name: post-report
        type: call
        call: slack-sfn.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Step Functions Report: Execution {{execution_arn}} status: {{get-execution.status}}. Total events: {{get-history.event_count}}.'
  consumes:
  - namespace: sfn-api
    type: http
    baseUri: https://states.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_stepfunctions_token
      placement: header
    resources:
    - name: execution
      path: /
      inputParameters:
      - name: execution_arn
        in: body
      operations:
      - name: describe-execution
        method: POST
      - name: get-execution-history
        method: POST
  - namespace: slack-sfn
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → step-functions-workflow-status-reporter.yml

Fetches non-compliant AWS Config rule evaluations, triggers SSM Automation remediation, and posts the remediation status to Slack.

naftiko: '0.5'
info:
  label: Config Compliance Remediator
  description: Fetches non-compliant AWS Config rule evaluations, triggers SSM Automation remediation, and posts the remediation status to Slack.
  tags:
  - cloud
  - compliance
  - security
  - aws
  - config
  - ssm
  - slack
capability:
  exposes:
  - type: mcp
    namespace: config-remediate
    port: 8080
    tools:
    - name: remediate-non-compliant
      description: Fetch non-compliant Config evaluations, trigger SSM remediation, and report status to Slack.
      inputParameters:
      - name: config_rule_name
        in: body
        type: string
        description: The AWS Config rule name to check.
      - name: ssm_document_name
        in: body
        type: string
        description: The SSM Automation document for remediation.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for compliance notifications.
      steps:
      - name: get-compliance
        type: call
        call: config-api.get-compliance-details
        with:
          config_rule_name: '{{config_rule_name}}'
      - name: start-remediation
        type: call
        call: ssm-api.start-automation-execution
        with:
          document_name: '{{ssm_document_name}}'
          resource_id: '{{get-compliance.non_compliant_resource}}'
      - name: notify-team
        type: call
        call: slack-config.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Config Remediation: Rule {{config_rule_name}} - Resource {{get-compliance.non_compliant_resource}} remediation started. SSM execution: {{start-remediation.execution_id}}.'
  consumes:
  - namespace: config-api
    type: http
    baseUri: https://config.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_config_token
      placement: header
    resources:
    - name: compliance
      path: /
      operations:
      - name: get-compliance-details
        method: POST
  - namespace: ssm-api
    type: http
    baseUri: https://ssm.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ssm_token
      placement: header
    resources:
    - name: automation
      path: /
      operations:
      - name: start-automation-execution
        method: POST
  - namespace: slack-config
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → config-compliance-remediator.yml

Detects failed AWS Glue ETL jobs, collects error logs from CloudWatch, and creates a Jira ticket for the data engineering team.

naftiko: '0.5'
info:
  label: Glue Job Failure Handler
  description: Detects failed AWS Glue ETL jobs, collects error logs from CloudWatch, and creates a Jira ticket for the data engineering team.
  tags:
  - cloud
  - etl
  - data-engineering
  - aws
  - glue
  - cloudwatch
  - jira
capability:
  exposes:
  - type: mcp
    namespace: glue-failure
    port: 8080
    tools:
    - name: handle-glue-failure
      description: Process a Glue job failure by fetching error logs and creating a Jira ticket for investigation.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: The AWS Glue job name that failed.
      - name: job_run_id
        in: body
        type: string
        description: The Glue job run ID.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for data engineering tickets.
      steps:
      - name: get-job-run
        type: call
        call: glue-api.get-job-run
        with:
          job_name: '{{job_name}}'
          job_run_id: '{{job_run_id}}'
      - name: get-error-logs
        type: call
        call: cw-glue.get-log-events
        with:
          log_group: /aws-glue/jobs/error
          log_stream: '{{job_run_id}}'
      - name: create-ticket
        type: call
        call: jira-glue.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: 'Glue Job Failure: {{job_name}} (Run: {{job_run_id}})'
          description: 'Error: {{get-job-run.error_message}}. Logs: {{get-error-logs.events}}'
  consumes:
  - namespace: glue-api
    type: http
    baseUri: https://glue.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_glue_token
      placement: header
    resources:
    - name: job-run
      path: /
      operations:
      - name: get-job-run
        method: POST
  - namespace: cw-glue
    type: http
    baseUri: https://logs.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: log-events
      path: /
      operations:
      - name: get-log-events
        method: POST
  - namespace: jira-glue
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → glue-job-failure-handler.yml

Queries Datadog for cloud cost anomalies exceeding a threshold, creates a Jira cost-investigation ticket, and posts a summary to the FinOps Slack channel.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Responder
  description: Queries Datadog for cloud cost anomalies exceeding a threshold, creates a Jira cost-investigation ticket, and posts a summary to the FinOps Slack channel.
  tags:
  - cloud
  - finops
  - cost-management
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finops-ops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given a cost anomaly metric query and threshold, fetch Datadog metrics to confirm the anomaly, open a Jira cost-investigation ticket, and post a FinOps Slack alert.
      inputParameters:
      - name: metric_query
        in: body
        type: string
        description: The Datadog metrics query string identifying the cost metric, e.g. aws.ec2.estimated_charges.
      - name: threshold
        in: body
        type: number
        description: The cost threshold in USD above which an anomaly is declared.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for the cost-investigation ticket, e.g. FINOPS.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the FinOps alert notification.
      steps:
      - name: query-metrics
        type: call
        call: datadog-cost.query-metrics
        with:
          query: '{{metric_query}}'
      - name: create-ticket
        type: call
        call: jira-cost.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: 'Cost anomaly detected: {{metric_query}} exceeded ${{threshold}}'
          description: 'Datadog query result: {{query-metrics.value}}'
      - name: post-finops-alert
        type: call
        call: slack-cost.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Cost Anomaly: {{metric_query}} = {{query-metrics.value}} (threshold: ${{threshold}}). Jira: {{create-ticket.key}}'
  consumes:
  - namespace: datadog-cost
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - namespace: jira-cost
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-cost
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-anomaly-responder.yml

Fetches the completed sprint data from Jira, calculates story point velocity, and publishes the sprint review digest to the engineering Slack channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Report
  description: Fetches the completed sprint data from Jira, calculates story point velocity, and publishes the sprint review digest to the engineering Slack channel.
  tags:
  - devops
  - reporting
  - jira
  - slack
  - agile
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: publish-sprint-velocity
      description: Given a Jira board ID and sprint ID, fetch completed issue story points, calculate velocity, and post the sprint velocity digest to the engineering Slack channel.
      inputParameters:
      - name: board_id
        in: body
        type: integer
        description: The Jira Agile board ID to query sprint data from.
      - name: sprint_id
        in: body
        type: integer
        description: The sprint ID to report velocity for.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the sprint velocity digest.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira-agile.get-sprint-issues
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: post-velocity
        type: call
        call: slack-agile.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Sprint {{sprint_id}} Velocity: {{get-sprint-issues.completed_points}} story points completed out of {{get-sprint-issues.committed_points}} committed ({{get-sprint-issues.completion_pct}}%).'
  consumes:
  - namespace: jira-agile
    type: http
    baseUri: https://amazon.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: sprint-issues
      path: /board/{board_id}/sprint/{sprint_id}/issue
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-issues
        method: GET
  - namespace: slack-agile
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-sprint-velocity-report.yml

When GitHub Advanced Security detects a secret in a repository, creates a Jira security ticket, notifies the security Slack channel, and revokes the exposed credential via Okta.

naftiko: '0.5'
info:
  label: GitHub Secret Scanning Alert Handler
  description: When GitHub Advanced Security detects a secret in a repository, creates a Jira security ticket, notifies the security Slack channel, and revokes the exposed credential via Okta.
  tags:
  - security
  - devops
  - github
  - jira
  - slack
  - okta
  - secret-scanning
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: handle-secret-alert
      description: Given a GitHub secret scanning alert ID and repository, fetch alert details, create a Jira security ticket, revoke the associated credential in Okta, and notify the security Slack channel.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format where the secret was detected.
      - name: alert_number
        in: body
        type: integer
        description: The GitHub secret scanning alert number.
      - name: okta_token_id
        in: body
        type: string
        description: The Okta API token ID to revoke if it matches the exposed credential.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the security team notification.
      steps:
      - name: get-alert
        type: call
        call: github-ss.get-secret-alert
        with:
          repo: '{{repo}}'
          alert_number: '{{alert_number}}'
      - name: create-security-ticket
        type: call
        call: jira-ss.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Secret exposed in {{repo}}: {{get-alert.secret_type}}'
          description: 'Alert: {{alert_number}}

            Secret type: {{get-alert.secret_type}}

            State: {{get-alert.state}}'
      - name: revoke-token
        type: call
        call: okta-ss.revoke-token
        with:
          token_id: '{{okta_token_id}}'
      - name: notify-security
        type: call
        call: slack-ss.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'SECRET ALERT: {{get-alert.secret_type}} exposed in {{repo}}. Token revoked in Okta. Jira: {{create-security-ticket.key}}'
  consumes:
  - namespace: github-ss
    type: http
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: secret-alert
      path: /repos/{repo}/secret-scanning/alerts/{alert_number}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-secret-alert
        method: GET
  - namespace: jira-ss
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: okta-ss
    type: http
    baseUri: https://amazon.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: token
      path: /users/me/tokens/{token_id}
      inputParameters:
      - name: token_id
        in: path
      operations:
      - name: revoke-token
        method: DELETE
  - namespace: slack-ss
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-secret-scanning-alert-handler.yml

Generates personalized music playlist recommendations using Amazon Personalize, stores recommendations in DynamoDB, and notifies users via SNS push notification.

naftiko: '0.5'
info:
  label: Music Playlist Recommendation Notifier
  description: Generates personalized music playlist recommendations using Amazon Personalize, stores recommendations in DynamoDB, and notifies users via SNS push notification.
  tags:
  - media
  - music
  - personalization
  - aws
  - personalize
  - dynamodb
  - sns
capability:
  exposes:
  - type: mcp
    namespace: music-recommend
    port: 8080
    tools:
    - name: recommend-and-notify
      description: Generate music recommendations with Personalize, store them, and push-notify the user.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Amazon Music user ID.
      - name: campaign_arn
        in: body
        type: string
        description: The Personalize campaign ARN for recommendations.
      - name: sns_topic_arn
        in: body
        type: string
        description: SNS topic ARN for push notifications.
      steps:
      - name: get-recommendations
        type: call
        call: personalize-api.get-recommendations
        with:
          campaign_arn: '{{campaign_arn}}'
          user_id: '{{user_id}}'
      - name: store-recommendations
        type: call
        call: dynamo-music.put-item
        with:
          table_name: music-recommendations
          user_id: '{{user_id}}'
          items: '{{get-recommendations.item_list}}'
      - name: notify-user
        type: call
        call: sns-music.publish
        with:
          topic_arn: '{{sns_topic_arn}}'
          message: New playlist recommendations are ready for you! Check your Amazon Music app.
  consumes:
  - namespace: personalize-api
    type: http
    baseUri: https://personalize-runtime.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_personalize_token
      placement: header
    resources:
    - name: recommendations
      path: /recommendations
      operations:
      - name: get-recommendations
        method: POST
  - namespace: dynamo-music
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
  - namespace: sns-music
    type: http
    baseUri: https://sns.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sns_token
      placement: header
    resources:
    - name: publish
      path: /
      operations:
      - name: publish
        method: POST
Open in Framework → View in Fleet → music-playlist-recommendation-notifier.yml

Queries a specific CloudWatch metric for a given namespace and returns the latest data points.

naftiko: '0.5'
info:
  label: CloudWatch Metric Query
  description: Queries a specific CloudWatch metric for a given namespace and returns the latest data points.
  tags:
  - cloud
  - monitoring
  - aws
  - cloudwatch
capability:
  exposes:
  - type: mcp
    namespace: cw-metrics
    port: 8080
    tools:
    - name: get-metric-data
      description: Retrieve the latest data points for a specific CloudWatch metric. Use to check resource utilization or operational health.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: The CloudWatch metric namespace, e.g. AWS/EC2.
      - name: metric_name
        in: body
        type: string
        description: The name of the metric to query, e.g. CPUUtilization.
      - name: period
        in: body
        type: number
        description: The granularity in seconds for the metric data points.
      call: cloudwatch-api.get-metric-data
      with:
        namespace: '{{namespace}}'
        metric_name: '{{metric_name}}'
        period: '{{period}}'
      outputParameters:
      - name: datapoints
        type: array
        mapping: $.MetricDataResults[0].Values
  consumes:
  - namespace: cloudwatch-api
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric-data
      path: /
      inputParameters:
      - name: namespace
        in: query
      - name: metric_name
        in: query
      - name: period
        in: query
      operations:
      - name: get-metric-data
        method: POST
Open in Framework → View in Fleet → cloudwatch-metric-query.yml

Audits IAM user access keys for age, deactivates keys older than 90 days, and sends a compliance report via SES.

naftiko: '0.5'
info:
  label: IAM Access Key Rotation Enforcer
  description: Audits IAM user access keys for age, deactivates keys older than 90 days, and sends a compliance report via SES.
  tags:
  - cloud
  - security
  - compliance
  - aws
  - iam
  - ses
capability:
  exposes:
  - type: mcp
    namespace: iam-key-rotation
    port: 8080
    tools:
    - name: enforce-key-rotation
      description: Audit IAM access keys, deactivate stale keys older than the threshold, and email a compliance report.
      inputParameters:
      - name: username
        in: body
        type: string
        description: The IAM username to audit access keys for.
      - name: max_age_days
        in: body
        type: number
        description: Maximum allowed age in days before a key is deactivated.
      - name: report_email
        in: body
        type: string
        description: Email address to send the compliance report to.
      steps:
      - name: list-keys
        type: call
        call: iam-keys.list-access-keys
        with:
          username: '{{username}}'
      - name: deactivate-old-key
        type: call
        call: iam-keys.update-access-key
        with:
          username: '{{username}}'
          access_key_id: '{{list-keys.oldest_key_id}}'
          status: Inactive
      - name: send-report
        type: call
        call: ses-iam.send-email
        with:
          to: '{{report_email}}'
          subject: 'IAM Key Rotation Report: {{username}}'
          body: 'User {{username}}: Key {{list-keys.oldest_key_id}} (age: {{list-keys.oldest_key_age}} days) has been deactivated.'
  consumes:
  - namespace: iam-keys
    type: http
    baseUri: https://iam.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_iam_token
      placement: header
    resources:
    - name: access-keys
      path: /
      inputParameters:
      - name: username
        in: query
      operations:
      - name: list-access-keys
        method: GET
    - name: update-key
      path: /
      inputParameters:
      - name: username
        in: query
      - name: access_key_id
        in: query
      - name: status
        in: query
      operations:
      - name: update-access-key
        method: POST
  - namespace: ses-iam
    type: http
    baseUri: https://email.us-east-1.amazonaws.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ses_token
      placement: header
    resources:
    - name: email
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → iam-access-key-rotation-enforcer.yml

Creates a new user in Amazon Cognito, assigns them to appropriate groups, and sends a welcome email via SES with temporary credentials.

naftiko: '0.5'
info:
  label: Cognito User Provisioning Workflow
  description: Creates a new user in Amazon Cognito, assigns them to appropriate groups, and sends a welcome email via SES with temporary credentials.
  tags:
  - cloud
  - identity
  - aws
  - cognito
  - ses
capability:
  exposes:
  - type: mcp
    namespace: cognito-provision
    port: 8080
    tools:
    - name: provision-user
      description: Create a Cognito user, assign to groups, and send a welcome email with temporary credentials.
      inputParameters:
      - name: user_pool_id
        in: body
        type: string
        description: The Cognito user pool ID.
      - name: username
        in: body
        type: string
        description: The username to create.
      - name: email
        in: body
        type: string
        description: The user email address.
      - name: group_name
        in: body
        type: string
        description: The Cognito group to assign the user to.
      steps:
      - name: create-user
        type: call
        call: cognito-api.admin-create-user
        with:
          user_pool_id: '{{user_pool_id}}'
          username: '{{username}}'
          email: '{{email}}'
      - name: add-to-group
        type: call
        call: cognito-api.admin-add-user-to-group
        with:
          user_pool_id: '{{user_pool_id}}'
          username: '{{username}}'
          group_name: '{{group_name}}'
      - name: send-welcome
        type: call
        call: ses-cognito.send-email
        with:
          to: '{{email}}'
          subject: Welcome to Amazon - Your Account is Ready
          body: 'Hello {{username}}, your account has been created. Temporary password: {{create-user.temporary_password}}. You will be prompted to change it on first login.'
  consumes:
  - namespace: cognito-api
    type: http
    baseUri: https://cognito-idp.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cognito_token
      placement: header
    resources:
    - name: user
      path: /
      operations:
      - name: admin-create-user
        method: POST
      - name: admin-add-user-to-group
        method: POST
  - namespace: ses-cognito
    type: http
    baseUri: https://email.us-east-1.amazonaws.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ses_token
      placement: header
    resources:
    - name: email
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → cognito-user-provisioning-workflow.yml

When an employee's role changes in Workday, updates their Okta group memberships to reflect the new role's permissions and notifies the manager via Slack.

naftiko: '0.5'
info:
  label: Role Change Provisioning
  description: When an employee's role changes in Workday, updates their Okta group memberships to reflect the new role's permissions and notifies the manager via Slack.
  tags:
  - hr
  - role-change
  - workday
  - okta
  - slack
  - identity
capability:
  exposes:
  - type: mcp
    namespace: hr-role-change
    port: 8080
    tools:
    - name: sync-role-permissions
      description: Given a Workday employee ID and new role ID, update the employee's Okta group memberships to match the new role and notify their manager in Slack.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee whose role has changed.
      - name: new_okta_group_id
        in: body
        type: string
        description: The Okta group ID corresponding to the new role's permission set.
      - name: manager_slack_id
        in: body
        type: string
        description: The Slack user ID of the employee's manager for notification.
      steps:
      - name: get-employee
        type: call
        call: workday-rc.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: add-okta-group
        type: call
        call: okta-rc.add-user-to-group
        with:
          group_id: '{{new_okta_group_id}}'
          user_id: '{{get-employee.okta_user_id}}'
      - name: notify-manager
        type: call
        call: slack-rc.post-message
        with:
          channel: '{{manager_slack_id}}'
          text: Role update complete for {{get-employee.full_name}}. Okta permissions updated for group {{new_okta_group_id}}.
  consumes:
  - namespace: workday-rc
    type: http
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: worker
      path: /workers/{worker_id}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - namespace: okta-rc
    type: http
    baseUri: https://amazon.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-member
      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
  - namespace: slack-rc
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → role-change-provisioning.yml

Queries AWS Cost Explorer for current month spend by service, compares against budgets, and posts an overspend alert to Slack with a Jira ticket.

naftiko: '0.5'
info:
  label: Cost Explorer Budget Alert
  description: Queries AWS Cost Explorer for current month spend by service, compares against budgets, and posts an overspend alert to Slack with a Jira ticket.
  tags:
  - cloud
  - finops
  - cost-management
  - aws
  - cost-explorer
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cost-budget
    port: 8080
    tools:
    - name: check-budget-compliance
      description: Query Cost Explorer for current spend, compare against budget, create a Jira ticket if over budget, and post to Slack.
      inputParameters:
      - name: budget_amount
        in: body
        type: number
        description: The monthly budget amount in USD.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for budget tickets.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for budget alerts.
      steps:
      - name: get-cost-data
        type: call
        call: ce-api.get-cost-and-usage
        with:
          granularity: MONTHLY
          metrics: UnblendedCost
      - name: create-ticket
        type: call
        call: jira-budget.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: 'Budget Alert: Current spend ${{get-cost-data.total_cost}} vs budget ${{budget_amount}}'
      - name: post-alert
        type: call
        call: slack-budget.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Budget Alert: Current month spend ${{get-cost-data.total_cost}} against budget ${{budget_amount}}. Jira: {{create-ticket.key}}'
  consumes:
  - namespace: ce-api
    type: http
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cost_explorer_token
      placement: header
    resources:
    - name: cost
      path: /
      operations:
      - name: get-cost-and-usage
        method: POST
  - namespace: jira-budget
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - namespace: slack-budget
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cost-explorer-budget-alert.yml

Lists DNS resource record sets for a given Route 53 hosted zone and returns matching records.

naftiko: '0.5'
info:
  label: Route 53 DNS Record Lookup
  description: Lists DNS resource record sets for a given Route 53 hosted zone and returns matching records.
  tags:
  - cloud
  - networking
  - aws
  - dns
capability:
  exposes:
  - type: mcp
    namespace: route53-dns
    port: 8080
    tools:
    - name: list-records
      description: List all DNS records in a Route 53 hosted zone. Use to audit or verify DNS configurations.
      inputParameters:
      - name: hosted_zone_id
        in: body
        type: string
        description: The Route 53 hosted zone ID to list records for.
      call: route53-api.list-record-sets
      with:
        hosted_zone_id: '{{hosted_zone_id}}'
      outputParameters:
      - name: records
        type: array
        mapping: $.ResourceRecordSets
  consumes:
  - namespace: route53-api
    type: http
    baseUri: https://route53.amazonaws.com/2013-04-01
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_route53_token
      placement: header
    resources:
    - name: record-sets
      path: /hostedzone/{hosted_zone_id}/rrset
      inputParameters:
      - name: hosted_zone_id
        in: path
      operations:
      - name: list-record-sets
        method: GET
Open in Framework → View in Fleet → route-53-dns-record-lookup.yml

Schedules Amazon Fresh grocery deliveries by checking available delivery windows, reserving a slot, and sending a confirmation to the customer via SNS.

naftiko: '0.5'
info:
  label: Fresh Grocery Delivery Scheduler
  description: Schedules Amazon Fresh grocery deliveries by checking available delivery windows, reserving a slot, and sending a confirmation to the customer via SNS.
  tags:
  - grocery
  - amazon-fresh
  - delivery
  - logistics
  - sns
capability:
  exposes:
  - type: mcp
    namespace: fresh-delivery
    port: 8080
    tools:
    - name: schedule-delivery
      description: Check available delivery windows for Amazon Fresh, reserve a slot, and confirm with the customer.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Amazon Fresh order ID.
      - name: zip_code
        in: body
        type: string
        description: The delivery ZIP code.
      - name: customer_phone
        in: body
        type: string
        description: The customer phone number for SMS confirmation.
      steps:
      - name: get-windows
        type: call
        call: fresh-api.get-delivery-windows
        with:
          zip_code: '{{zip_code}}'
      - name: reserve-slot
        type: call
        call: fresh-api.reserve-delivery-slot
        with:
          order_id: '{{order_id}}'
          slot_id: '{{get-windows.first_available_slot_id}}'
      - name: confirm-customer
        type: call
        call: sns-fresh.publish
        with:
          phone_number: '{{customer_phone}}'
          message: Your Amazon Fresh delivery for order {{order_id}} is scheduled for {{reserve-slot.delivery_time}}. Track at amazon.com/orders.
  consumes:
  - namespace: fresh-api
    type: http
    baseUri: https://api.amazon.com/fresh/v1
    authentication:
      type: bearer
      token: $secrets.amazon_fresh_token
    resources:
    - name: delivery-windows
      path: /delivery-windows
      inputParameters:
      - name: zip_code
        in: query
      operations:
      - name: get-delivery-windows
        method: GET
    - name: delivery-slot
      path: /orders/{order_id}/delivery-slot
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: reserve-delivery-slot
        method: POST
  - namespace: sns-fresh
    type: http
    baseUri: https://sns.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sns_token
      placement: header
    resources:
    - name: sms
      path: /
      operations:
      - name: publish
        method: POST
Open in Framework → View in Fleet → fresh-grocery-delivery-scheduler.yml

Retrieves order details from Amazon Seller Central by order ID for marketplace seller operations.

naftiko: '0.5'
info:
  label: Seller Central Order Lookup
  description: Retrieves order details from Amazon Seller Central by order ID for marketplace seller operations.
  tags:
  - ecommerce
  - marketplace
  - seller-central
capability:
  exposes:
  - type: mcp
    namespace: seller-orders
    port: 8080
    tools:
    - name: get-order
      description: Look up a specific order from Amazon Seller Central by order ID. Returns buyer info, items, and status.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Amazon Marketplace order ID to retrieve.
      call: sp-api.get-order
      with:
        order_id: '{{order_id}}'
      outputParameters:
      - name: order_status
        type: string
        mapping: $.payload.OrderStatus
      - name: order_total
        type: number
        mapping: $.payload.OrderTotal.Amount
  consumes:
  - namespace: sp-api
    type: http
    baseUri: https://sellingpartnerapi-na.amazon.com
    authentication:
      type: bearer
      token: $secrets.sp_api_token
    resources:
    - name: order
      path: /orders/v0/orders/{order_id}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
Open in Framework → View in Fleet → seller-central-order-lookup.yml

Retrieves order details from the Selling Partner API, checks shipment status, and updates a DynamoDB tracking table with the latest fulfillment state.

naftiko: '0.5'
info:
  label: Order Fulfillment Tracker
  description: Retrieves order details from the Selling Partner API, checks shipment status, and updates a DynamoDB tracking table with the latest fulfillment state.
  tags:
  - ecommerce
  - logistics
  - fulfillment
  - marketplace
  - dynamodb
capability:
  exposes:
  - type: mcp
    namespace: fulfillment-track
    port: 8080
    tools:
    - name: track-order-fulfillment
      description: Track the fulfillment status of an Amazon marketplace order. Fetches order and shipment data, then updates the tracking database.
      inputParameters:
      - name: order_id
        in: body
        type: string
        description: The Amazon marketplace order ID to track.
      steps:
      - name: get-order
        type: call
        call: sp-fulfill.get-order
        with:
          order_id: '{{order_id}}'
      - name: get-shipment
        type: call
        call: sp-fulfill.get-shipment
        with:
          order_id: '{{order_id}}'
      - name: update-tracking
        type: call
        call: dynamo-fulfill.put-item
        with:
          table_name: order-fulfillment-tracking
          order_id: '{{order_id}}'
          order_status: '{{get-order.status}}'
          shipment_status: '{{get-shipment.tracking_status}}'
  consumes:
  - namespace: sp-fulfill
    type: http
    baseUri: https://sellingpartnerapi-na.amazon.com
    authentication:
      type: bearer
      token: $secrets.sp_api_token
    resources:
    - name: order
      path: /orders/v0/orders/{order_id}
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-order
        method: GET
    - name: shipment
      path: /orders/v0/orders/{order_id}/shipment
      inputParameters:
      - name: order_id
        in: path
      operations:
      - name: get-shipment
        method: GET
  - namespace: dynamo-fulfill
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
Open in Framework → View in Fleet → order-fulfillment-tracker.yml

Queries Datadog for a customer's service usage metrics, calculates a health score, and updates the corresponding Salesforce account record with the latest health indicator.

naftiko: '0.5'
info:
  label: Salesforce Customer Health Score Update
  description: Queries Datadog for a customer's service usage metrics, calculates a health score, and updates the corresponding Salesforce account record with the latest health indicator.
  tags:
  - crm
  - customer-success
  - salesforce
  - datadog
  - health-score
capability:
  exposes:
  - type: mcp
    namespace: cs-ops
    port: 8080
    tools:
    - name: update-customer-health-score
      description: Given a Salesforce account ID and the customer's Datadog service tag, fetch usage and error metrics from Datadog and update the Salesforce account's health score field.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID for the customer to update, e.g. 0015g00001XYZ.
      - name: datadog_service_tag
        in: body
        type: string
        description: The Datadog service tag used to identify the customer's usage metrics.
      steps:
      - name: get-metrics
        type: call
        call: datadog-cs.query-metrics
        with:
          query: avg:trace.web.request.hits{service:{{datadog_service_tag}}}.rollup(sum, 86400)
      - name: update-account
        type: call
        call: salesforce-cs.update-account
        with:
          account_id: '{{account_id}}'
          health_score: '{{get-metrics.value}}'
  consumes:
  - namespace: datadog-cs
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - namespace: salesforce-cs
    type: http
    baseUri: https://amazon.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: update-account
        method: PATCH
Open in Framework → View in Fleet → salesforce-customer-health-score-update.yml

Fetches Amazon Inspector vulnerability findings for EC2 instances, generates a risk summary, and creates a Jira security ticket.

naftiko: '0.5'
info:
  label: Inspector Vulnerability Report
  description: Fetches Amazon Inspector vulnerability findings for EC2 instances, generates a risk summary, and creates a Jira security ticket.
  tags:
  - cloud
  - security
  - vulnerability-management
  - aws
  - inspector
  - jira
capability:
  exposes:
  - type: mcp
    namespace: inspector-report
    port: 8080
    tools:
    - name: generate-vuln-report
      description: Fetch Inspector findings, summarize vulnerabilities by severity, and create a Jira ticket for remediation.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The AWS account ID to scan findings for.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for security tickets.
      steps:
      - name: list-findings
        type: call
        call: inspector-api.list-findings
        with:
          account_id: '{{account_id}}'
      - name: create-ticket
        type: call
        call: jira-inspector.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: 'Inspector Findings: {{list-findings.critical_count}} critical, {{list-findings.high_count}} high vulnerabilities'
          description: 'Account {{account_id}} has {{list-findings.total_count}} findings. Critical: {{list-findings.critical_count}}, High: {{list-findings.high_count}}. Remediation required.'
  consumes:
  - namespace: inspector-api
    type: http
    baseUri: https://inspector2.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_inspector_token
      placement: header
    resources:
    - name: findings
      path: /findings/list
      operations:
      - name: list-findings
        method: POST
  - namespace: jira-inspector
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → inspector-vulnerability-report.yml

Monitors API Gateway 429 error rates via CloudWatch, adjusts throttling limits, and logs the changes to DynamoDB.

naftiko: '0.5'
info:
  label: API Gateway Throttling Adjuster
  description: Monitors API Gateway 429 error rates via CloudWatch, adjusts throttling limits, and logs the changes to DynamoDB.
  tags:
  - cloud
  - api-management
  - aws
  - api-gateway
  - cloudwatch
  - dynamodb
capability:
  exposes:
  - type: mcp
    namespace: apigw-throttle
    port: 8080
    tools:
    - name: adjust-throttling
      description: Monitor API Gateway 429 rates, adjust throttling limits if needed, and log the change.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: The API Gateway API ID.
      - name: stage_name
        in: body
        type: string
        description: The API Gateway stage name.
      - name: new_rate_limit
        in: body
        type: number
        description: The new requests-per-second rate limit.
      steps:
      - name: get-429-rate
        type: call
        call: cw-apigw.get-metric-data
        with:
          namespace: AWS/ApiGateway
          metric_name: 4XXError
          api_id: '{{api_id}}'
      - name: update-throttle
        type: call
        call: apigw-api.update-stage
        with:
          api_id: '{{api_id}}'
          stage_name: '{{stage_name}}'
          rate_limit: '{{new_rate_limit}}'
      - name: log-change
        type: call
        call: dynamo-apigw.put-item
        with:
          table_name: apigw-throttle-changes
          api_id: '{{api_id}}'
          previous_429_rate: '{{get-429-rate.sum}}'
          new_rate_limit: '{{new_rate_limit}}'
  consumes:
  - namespace: cw-apigw
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric
      path: /
      operations:
      - name: get-metric-data
        method: POST
  - namespace: apigw-api
    type: http
    baseUri: https://apigateway.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_apigw_token
      placement: header
    resources:
    - name: stage
      path: /restapis/{api_id}/stages/{stage_name}
      inputParameters:
      - name: api_id
        in: path
      - name: stage_name
        in: path
      operations:
      - name: update-stage
        method: PATCH
  - namespace: dynamo-apigw
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
Open in Framework → View in Fleet → api-gateway-throttling-adjuster.yml

Lists all S3 buckets in the AWS account and returns their names, creation dates, and regions.

naftiko: '0.5'
info:
  label: S3 Bucket Listing
  description: Lists all S3 buckets in the AWS account and returns their names, creation dates, and regions.
  tags:
  - cloud
  - storage
  - aws
  - s3
capability:
  exposes:
  - type: mcp
    namespace: s3-listing
    port: 8080
    tools:
    - name: list-buckets
      description: List all S3 buckets in the AWS account. Returns bucket names, creation dates, and region information.
      inputParameters:
      - name: region
        in: body
        type: string
        description: The AWS region to filter buckets by, e.g. us-east-1.
      call: s3-api.list-buckets
      with:
        region: '{{region}}'
      outputParameters:
      - name: bucket_count
        type: number
        mapping: $.Buckets.length
      - name: buckets
        type: array
        mapping: $.Buckets
  consumes:
  - namespace: s3-api
    type: http
    baseUri: https://s3.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_s3_token
      placement: header
    resources:
    - name: buckets
      path: /
      inputParameters:
      - name: region
        in: query
      operations:
      - name: list-buckets
        method: GET
Open in Framework → View in Fleet → s3-bucket-listing.yml

Enriches an inbound Salesforce lead with ZoomInfo company and contact data, updates the lead record, and assigns it to the appropriate Salesforce queue.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment
  description: Enriches an inbound Salesforce lead with ZoomInfo company and contact data, updates the lead record, and assigns it to the appropriate Salesforce queue.
  tags:
  - sales
  - crm
  - lead-enrichment
  - salesforce
  - zoominfo
capability:
  exposes:
  - type: mcp
    namespace: sales-enrichment
    port: 8080
    tools:
    - name: enrich-lead
      description: Given a Salesforce lead ID, look up the contact in ZoomInfo, update the Salesforce lead record with enriched firmographic data, and assign it to the correct sales queue.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich, e.g. 00Q5g00001ABC.
      - name: queue_id
        in: body
        type: string
        description: The Salesforce queue ID to assign the enriched lead to.
      steps:
      - name: get-lead
        type: call
        call: salesforce-enrich.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: lookup-zoominfo
        type: call
        call: zoominfo.search-contact
        with:
          email: '{{get-lead.email}}'
          company_name: '{{get-lead.company}}'
      - name: update-lead
        type: call
        call: salesforce-enrich.update-lead
        with:
          lead_id: '{{lead_id}}'
          annual_revenue: '{{lookup-zoominfo.revenue}}'
          employee_count: '{{lookup-zoominfo.employee_count}}'
          industry: '{{lookup-zoominfo.industry}}'
          owner_id: '{{queue_id}}'
  consumes:
  - namespace: salesforce-enrich
    type: http
    baseUri: https://amazon.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
      - name: update-lead
        method: PATCH
  - namespace: zoominfo
    type: http
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: contact
      path: /contact
      operations:
      - name: search-contact
        method: POST
Open in Framework → View in Fleet → salesforce-lead-enrichment.yml

Fetches a pending ServiceNow change request, checks Datadog service health for the affected service, and automatically approves or escalates the change based on current system stability.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Approval Gate
  description: Fetches a pending ServiceNow change request, checks Datadog service health for the affected service, and automatically approves or escalates the change based on current system stability.
  tags:
  - itsm
  - change-management
  - servicenow
  - datadog
  - approval
capability:
  exposes:
  - type: mcp
    namespace: itsm-change
    port: 8080
    tools:
    - name: evaluate-change-request
      description: Given a ServiceNow change request number and Datadog service name, check current service health metrics and either approve the change or escalate it with a health report attached.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number, e.g. CHG0012345.
      - name: service_name
        in: body
        type: string
        description: The Datadog service name to check health for before approving the change.
      steps:
      - name: get-change
        type: call
        call: servicenow-chg.get-change
        with:
          number: '{{change_number}}'
      - name: check-health
        type: call
        call: datadog-chg.query-metrics
        with:
          query: avg:trace.web.request.errors{service:{{service_name}}}.rollup(avg, 300)
      - name: update-change
        type: call
        call: servicenow-chg.update-change
        with:
          sys_id: '{{get-change.sys_id}}'
          work_notes: 'Automated health check: error rate = {{check-health.value}}. Change proceed status updated.'
  consumes:
  - namespace: servicenow-chg
    type: http
    baseUri: https://amazon.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_pass
    resources:
    - name: change
      path: /table/change_request
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-change
        method: GET
      - name: update-change
        method: PATCH
  - namespace: datadog-chg
    type: http
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → servicenow-change-request-approval-gate.yml

Generates a Twitch creator payout report by aggregating subscription and bits revenue, stores it in S3, and emails the report via SES.

naftiko: '0.5'
info:
  label: Twitch Creator Payout Report
  description: Generates a Twitch creator payout report by aggregating subscription and bits revenue, stores it in S3, and emails the report via SES.
  tags:
  - media
  - twitch
  - payments
  - analytics
  - aws
  - s3
  - ses
capability:
  exposes:
  - type: mcp
    namespace: twitch-payout
    port: 8080
    tools:
    - name: generate-payout-report
      description: Aggregate Twitch creator revenue, store the report in S3, and email it to the creator.
      inputParameters:
      - name: broadcaster_id
        in: body
        type: string
        description: The Twitch broadcaster ID.
      - name: period
        in: body
        type: string
        description: The reporting period, e.g. 2026-03.
      - name: creator_email
        in: body
        type: string
        description: The creator email for the report.
      steps:
      - name: get-sub-revenue
        type: call
        call: twitch-revenue.get-subscriptions
        with:
          broadcaster_id: '{{broadcaster_id}}'
      - name: upload-report
        type: call
        call: s3-twitch.put-object
        with:
          bucket: twitch-payout-reports
          key: '{{broadcaster_id}}/{{period}}-payout.json'
          body: '{"broadcaster": "{{broadcaster_id}}", "period": "{{period}}", "sub_revenue": {{get-sub-revenue.total}}}'
      - name: email-report
        type: call
        call: ses-twitch.send-email
        with:
          to: '{{creator_email}}'
          subject: Twitch Payout Report - {{period}}
          body: 'Your payout report for {{period}} is ready. Subscription revenue: ${{get-sub-revenue.total}}. Full report: s3://twitch-payout-reports/{{broadcaster_id}}/{{period}}-payout.json'
  consumes:
  - namespace: twitch-revenue
    type: http
    baseUri: https://api.twitch.tv/helix
    authentication:
      type: bearer
      token: $secrets.twitch_api_token
    resources:
    - name: subscriptions
      path: /subscriptions
      inputParameters:
      - name: broadcaster_id
        in: query
      operations:
      - name: get-subscriptions
        method: GET
  - namespace: s3-twitch
    type: http
    baseUri: https://s3.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_s3_token
      placement: header
    resources:
    - name: object
      path: /{bucket}/{key}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - namespace: ses-twitch
    type: http
    baseUri: https://email.us-east-1.amazonaws.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ses_token
      placement: header
    resources:
    - name: email
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → twitch-creator-payout-report.yml

Returns the current status, node count, and storage utilization for an Amazon Redshift cluster.

naftiko: '0.5'
info:
  label: Redshift Cluster Status
  description: Returns the current status, node count, and storage utilization for an Amazon Redshift cluster.
  tags:
  - cloud
  - data-warehouse
  - aws
  - redshift
capability:
  exposes:
  - type: mcp
    namespace: redshift-status
    port: 8080
    tools:
    - name: describe-cluster
      description: Get the status, node count, and configuration for a Redshift cluster.
      inputParameters:
      - name: cluster_identifier
        in: body
        type: string
        description: The Redshift cluster identifier to describe.
      call: redshift-api.describe-cluster
      with:
        cluster_identifier: '{{cluster_identifier}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Clusters[0].ClusterStatus
      - name: node_count
        type: number
        mapping: $.Clusters[0].NumberOfNodes
  consumes:
  - namespace: redshift-api
    type: http
    baseUri: https://redshift.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_redshift_token
      placement: header
    resources:
    - name: cluster
      path: /
      inputParameters:
      - name: cluster_identifier
        in: query
      operations:
      - name: describe-cluster
        method: GET
Open in Framework → View in Fleet → redshift-cluster-status.yml

Checks Redshift query execution status, validates row counts against expected thresholds, and posts ETL health reports to a Slack channel.

naftiko: '0.5'
info:
  label: Redshift ETL Pipeline Monitor
  description: Checks Redshift query execution status, validates row counts against expected thresholds, and posts ETL health reports to a Slack channel.
  tags:
  - cloud
  - data-warehouse
  - etl
  - aws
  - redshift
  - slack
capability:
  exposes:
  - type: mcp
    namespace: redshift-etl
    port: 8080
    tools:
    - name: monitor-etl-pipeline
      description: Check the status of a Redshift ETL query, validate output row counts, and report pipeline health to Slack.
      inputParameters:
      - name: query_id
        in: body
        type: string
        description: The Redshift query execution ID to monitor.
      - name: expected_row_count
        in: body
        type: number
        description: The minimum expected row count for validation.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for ETL health reports.
      steps:
      - name: get-query-status
        type: call
        call: redshift-etl-api.describe-statement
        with:
          query_id: '{{query_id}}'
      - name: get-row-count
        type: call
        call: redshift-etl-api.get-statement-result
        with:
          query_id: '{{query_id}}'
      - name: post-report
        type: call
        call: slack-etl.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'ETL Pipeline Report: Query {{query_id}} status: {{get-query-status.status}}. Rows loaded: {{get-row-count.total_rows}} (expected: {{expected_row_count}}).'
  consumes:
  - namespace: redshift-etl-api
    type: http
    baseUri: https://redshift-data.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_redshift_data_token
      placement: header
    resources:
    - name: statement
      path: /
      inputParameters:
      - name: query_id
        in: body
      operations:
      - name: describe-statement
        method: POST
      - name: get-statement-result
        method: POST
  - namespace: slack-etl
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → redshift-etl-pipeline-monitor.yml

Retrieves GuardDuty security findings, creates an incident in ServiceNow, and notifies the security operations team via Slack.

naftiko: '0.5'
info:
  label: GuardDuty Finding Incident Creator
  description: Retrieves GuardDuty security findings, creates an incident in ServiceNow, and notifies the security operations team via Slack.
  tags:
  - cloud
  - security
  - incident-response
  - aws
  - guardduty
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: guardduty-incident
    port: 8080
    tools:
    - name: process-finding
      description: Fetch a GuardDuty finding, create a ServiceNow incident for it, and alert the security team on Slack.
      inputParameters:
      - name: detector_id
        in: body
        type: string
        description: The GuardDuty detector ID.
      - name: finding_id
        in: body
        type: string
        description: The GuardDuty finding ID to process.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for security operations alerts.
      steps:
      - name: get-finding
        type: call
        call: guardduty-api.get-findings
        with:
          detector_id: '{{detector_id}}'
          finding_id: '{{finding_id}}'
      - name: create-incident
        type: call
        call: servicenow-gd.create-incident
        with:
          short_description: 'GuardDuty: {{get-finding.type}} - Severity {{get-finding.severity}}'
          description: 'Finding: {{get-finding.description}}. Resource: {{get-finding.resource}}.'
          urgency: '2'
      - name: alert-security
        type: call
        call: slack-gd.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'GuardDuty Alert: {{get-finding.type}} (Severity: {{get-finding.severity}}). ServiceNow Incident: {{create-incident.number}}.'
  consumes:
  - namespace: guardduty-api
    type: http
    baseUri: https://guardduty.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_guardduty_token
      placement: header
    resources:
    - name: findings
      path: /detector/{detector_id}/findings/get
      inputParameters:
      - name: detector_id
        in: path
      operations:
      - name: get-findings
        method: POST
  - namespace: servicenow-gd
    type: http
    baseUri: https://amazon.service-now.com/api/now/table
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /incident
      operations:
      - name: create-incident
        method: POST
  - namespace: slack-gd
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → guardduty-finding-incident-creator.yml

Monitors an AWS CodePipeline execution, fetches stage results, and posts a deployment summary to Slack with pass/fail status.

naftiko: '0.5'
info:
  label: CodePipeline Deployment Tracker
  description: Monitors an AWS CodePipeline execution, fetches stage results, and posts a deployment summary to Slack with pass/fail status.
  tags:
  - cloud
  - cicd
  - deployment
  - aws
  - codepipeline
  - slack
capability:
  exposes:
  - type: mcp
    namespace: codepipeline-track
    port: 8080
    tools:
    - name: track-deployment
      description: Monitor a CodePipeline execution, gather stage results, and post a deployment summary to Slack.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: The CodePipeline pipeline name.
      - name: execution_id
        in: body
        type: string
        description: The pipeline execution ID to track.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for deployment updates.
      steps:
      - name: get-execution
        type: call
        call: cp-api.get-pipeline-execution
        with:
          pipeline_name: '{{pipeline_name}}'
          execution_id: '{{execution_id}}'
      - name: get-stage-states
        type: call
        call: cp-api.get-pipeline-state
        with:
          pipeline_name: '{{pipeline_name}}'
      - name: post-summary
        type: call
        call: slack-cp.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Deployment {{execution_id}} for {{pipeline_name}}: Status {{get-execution.status}}. Stages: {{get-stage-states.stage_count}} total.'
  consumes:
  - namespace: cp-api
    type: http
    baseUri: https://codepipeline.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_codepipeline_token
      placement: header
    resources:
    - name: execution
      path: /
      operations:
      - name: get-pipeline-execution
        method: POST
    - name: state
      path: /
      operations:
      - name: get-pipeline-state
        method: POST
  - namespace: slack-cp
    type: http
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: message
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → codepipeline-deployment-tracker.yml

Checks whether a Twitch channel is currently live and returns viewer count and stream title.

naftiko: '0.5'
info:
  label: Twitch Stream Status
  description: Checks whether a Twitch channel is currently live and returns viewer count and stream title.
  tags:
  - media
  - streaming
  - twitch
capability:
  exposes:
  - type: mcp
    namespace: twitch-status
    port: 8080
    tools:
    - name: get-stream-status
      description: Check if a Twitch channel is currently live. Returns stream title, viewer count, and game category.
      inputParameters:
      - name: user_login
        in: body
        type: string
        description: The Twitch channel login name to check.
      call: twitch-api.get-streams
      with:
        user_login: '{{user_login}}'
      outputParameters:
      - name: is_live
        type: boolean
        mapping: $.data.length > 0
      - name: viewer_count
        type: number
        mapping: $.data[0].viewer_count
  consumes:
  - namespace: twitch-api
    type: http
    baseUri: https://api.twitch.tv/helix
    authentication:
      type: bearer
      token: $secrets.twitch_api_token
    resources:
    - name: streams
      path: /streams
      inputParameters:
      - name: user_login
        in: query
      operations:
      - name: get-streams
        method: GET
Open in Framework → View in Fleet → twitch-stream-status.yml

Checks SES account sending statistics for bounce and complaint rates, logs metrics to CloudWatch, and alerts via SNS if rates exceed thresholds.

naftiko: '0.5'
info:
  label: SES Bounce Rate Monitor
  description: Checks SES account sending statistics for bounce and complaint rates, logs metrics to CloudWatch, and alerts via SNS if rates exceed thresholds.
  tags:
  - cloud
  - email
  - monitoring
  - aws
  - ses
  - cloudwatch
  - sns
capability:
  exposes:
  - type: mcp
    namespace: ses-monitor
    port: 8080
    tools:
    - name: monitor-bounce-rate
      description: Check SES bounce and complaint rates, log to CloudWatch, and alert via SNS if thresholds are exceeded.
      inputParameters:
      - name: bounce_threshold
        in: body
        type: number
        description: Maximum acceptable bounce rate percentage.
      - name: sns_topic_arn
        in: body
        type: string
        description: SNS topic ARN for email health alerts.
      steps:
      - name: get-send-stats
        type: call
        call: ses-stats.get-account-stats
        with: {}
      - name: log-metrics
        type: call
        call: cw-ses.put-metric-data
        with:
          namespace: Custom/SESHealth
          metric_name: BounceRate
          value: '{{get-send-stats.bounce_rate}}'
      - name: send-alert
        type: call
        call: sns-ses.publish
        with:
          topic_arn: '{{sns_topic_arn}}'
          message: 'SES Bounce Rate Alert: Current rate {{get-send-stats.bounce_rate}}% exceeds threshold {{bounce_threshold}}%.'
  consumes:
  - namespace: ses-stats
    type: http
    baseUri: https://email.us-east-1.amazonaws.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ses_token
      placement: header
    resources:
    - name: account
      path: /email/account
      operations:
      - name: get-account-stats
        method: GET
  - namespace: cw-ses
    type: http
    baseUri: https://monitoring.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_cloudwatch_token
      placement: header
    resources:
    - name: metric
      path: /
      operations:
      - name: put-metric-data
        method: POST
  - namespace: sns-ses
    type: http
    baseUri: https://sns.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sns_token
      placement: header
    resources:
    - name: publish
      path: /
      operations:
      - name: publish
        method: POST
Open in Framework → View in Fleet → ses-bounce-rate-monitor.yml

Fetches a newly created Jira issue, sends the description to the Anthropic Claude API for priority triage and summarization, and updates the Jira issue with the AI-generated priority label and summary.

naftiko: '0.5'
info:
  label: Jira Issue Triage with AI Summarization
  description: Fetches a newly created Jira issue, sends the description to the Anthropic Claude API for priority triage and summarization, and updates the Jira issue with the AI-generated priority label and summary.
  tags:
  - itsm
  - ai
  - triage
  - jira
  - anthropic
capability:
  exposes:
  - type: mcp
    namespace: itsm-ai
    port: 8080
    tools:
    - name: triage-issue
      description: Given a Jira issue key, fetch its description, send it to the Anthropic Claude API for triage analysis, and update the Jira issue with the recommended priority and AI-generated summary.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key to triage, e.g. ENG-4201.
      steps:
      - name: get-issue
        type: call
        call: jira-triage.get-issue
        with:
          issue_key: '{{issue_key}}'
      - name: ai-triage
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 512
          system: You are a software engineering triage assistant. Respond with a JSON object containing 'priority' (P1/P2/P3/P4) and 'summary' (one sentence).
          user_message: 'Triage this issue: {{get-issue.summary}}


            {{get-issue.description}}'
      - name: update-issue
        type: call
        call: jira-triage.update-issue
        with:
          issue_key: '{{issue_key}}'
          priority: '{{ai-triage.priority}}'
          description: 'AI Triage Summary: {{ai-triage.summary}}


            Original: {{get-issue.description}}'
  consumes:
  - namespace: jira-triage
    type: http
    baseUri: https://amazon.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_token
    resources:
    - name: issue
      path: /issue/{issue_key}
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: get-issue
        method: GET
      - name: update-issue
        method: PUT
  - namespace: anthropic
    type: http
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: apikey
      key: x-api-key
      value: $secrets.anthropic_api_key
      placement: header
    resources:
    - name: message
      path: /messages
      operations:
      - name: create-message
        method: POST
Open in Framework → View in Fleet → jira-issue-triage-with-ai-summarization.yml

Scans S3 buckets for public access misconfigurations, logs findings to DynamoDB, and alerts the security team via SNS.

naftiko: '0.5'
info:
  label: S3 Bucket Compliance Scanner
  description: Scans S3 buckets for public access misconfigurations, logs findings to DynamoDB, and alerts the security team via SNS.
  tags:
  - cloud
  - security
  - compliance
  - aws
  - s3
  - dynamodb
  - sns
capability:
  exposes:
  - type: mcp
    namespace: s3-compliance
    port: 8080
    tools:
    - name: scan-bucket-access
      description: Scan an S3 bucket for public access settings, record findings in DynamoDB, and alert via SNS if misconfigured.
      inputParameters:
      - name: bucket_name
        in: body
        type: string
        description: The S3 bucket name to scan for public access.
      - name: sns_topic_arn
        in: body
        type: string
        description: The SNS topic ARN for security alerts.
      steps:
      - name: check-public-access
        type: call
        call: s3-scan.get-public-access-block
        with:
          bucket_name: '{{bucket_name}}'
      - name: log-finding
        type: call
        call: dynamo-scan.put-item
        with:
          table_name: s3-compliance-findings
          bucket_name: '{{bucket_name}}'
          public_access: '{{check-public-access.public_access_block}}'
      - name: send-alert
        type: call
        call: sns-scan.publish
        with:
          topic_arn: '{{sns_topic_arn}}'
          message: 'S3 Compliance Finding: {{bucket_name}} public access config: {{check-public-access.public_access_block}}'
  consumes:
  - namespace: s3-scan
    type: http
    baseUri: https://s3.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_s3_token
      placement: header
    resources:
    - name: public-access
      path: /{bucket_name}?publicAccessBlock
      inputParameters:
      - name: bucket_name
        in: path
      operations:
      - name: get-public-access-block
        method: GET
  - namespace: dynamo-scan
    type: http
    baseUri: https://dynamodb.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_dynamodb_token
      placement: header
    resources:
    - name: item
      path: /
      operations:
      - name: put-item
        method: POST
  - namespace: sns-scan
    type: http
    baseUri: https://sns.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sns_token
      placement: header
    resources:
    - name: publish
      path: /
      operations:
      - name: publish
        method: POST
Open in Framework → View in Fleet → s3-bucket-compliance-scanner.yml

Lists container images in an Amazon ECR repository and returns image tags and push timestamps.

naftiko: '0.5'
info:
  label: ECR Image List
  description: Lists container images in an Amazon ECR repository and returns image tags and push timestamps.
  tags:
  - cloud
  - containers
  - aws
  - ecr
capability:
  exposes:
  - type: mcp
    namespace: ecr-images
    port: 8080
    tools:
    - name: list-images
      description: List all container images in a given ECR repository. Returns image tags and pushed-at dates.
      inputParameters:
      - name: repository_name
        in: body
        type: string
        description: The ECR repository name to list images for.
      call: ecr-api.list-images
      with:
        repository_name: '{{repository_name}}'
      outputParameters:
      - name: images
        type: array
        mapping: $.imageIds
  consumes:
  - namespace: ecr-api
    type: http
    baseUri: https://api.ecr.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ecr_token
      placement: header
    resources:
    - name: images
      path: /
      inputParameters:
      - name: repository_name
        in: body
      operations:
      - name: list-images
        method: POST
Open in Framework → View in Fleet → ecr-image-list.yml

Fetches viewership analytics for Prime Video content, generates a performance summary, and distributes it to stakeholders via email through SES.

naftiko: '0.5'
info:
  label: Prime Video Content Performance Report
  description: Fetches viewership analytics for Prime Video content, generates a performance summary, and distributes it to stakeholders via email through SES.
  tags:
  - media
  - prime-video
  - analytics
  - studios
  - ses
capability:
  exposes:
  - type: mcp
    namespace: pv-performance
    port: 8080
    tools:
    - name: generate-content-report
      description: Generate a viewership performance report for Prime Video content and email it to stakeholders via SES.
      inputParameters:
      - name: content_id
        in: body
        type: string
        description: The Prime Video content ID (ASIN) to analyze.
      - name: recipient_email
        in: body
        type: string
        description: The email address to send the report to.
      steps:
      - name: get-viewership
        type: call
        call: pv-analytics.get-viewership
        with:
          content_id: '{{content_id}}'
      - name: get-content-metadata
        type: call
        call: pv-analytics.get-content-info
        with:
          content_id: '{{content_id}}'
      - name: send-report
        type: call
        call: ses-report.send-email
        with:
          to: '{{recipient_email}}'
          subject: 'Performance Report: {{get-content-metadata.title}}'
          body: 'Title: {{get-content-metadata.title}}

            Total Views: {{get-viewership.total_views}}

            Completion Rate: {{get-viewership.completion_rate}}%

            Avg Watch Time: {{get-viewership.avg_watch_minutes}} min'
  consumes:
  - namespace: pv-analytics
    type: http
    baseUri: https://api.amazonvideo.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.prime_video_analytics_token
    resources:
    - name: viewership
      path: /content/{content_id}/viewership
      inputParameters:
      - name: content_id
        in: path
      operations:
      - name: get-viewership
        method: GET
    - name: content-info
      path: /content/{content_id}
      inputParameters:
      - name: content_id
        in: path
      operations:
      - name: get-content-info
        method: GET
  - namespace: ses-report
    type: http
    baseUri: https://email.us-east-1.amazonaws.com/v2
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_ses_token
      placement: header
    resources:
    - name: email
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → prime-video-content-performance-report.yml

Generates a podcast performance digest by pulling analytics from Apple Podcasts Connect, summarizing with AI, and distributing to the content team via Slack.

naftiko: '0.5'
info:
  label: Apple Podcast Analytics Digest
  description: Generates a podcast performance digest by pulling analytics from Apple Podcasts Connect, summarizing with AI, and distributing to the content team via Slack.
  tags:
  - media
  - apple-podcasts
  - analytics
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: podcast-analytics
    port: 8080
    tools:
    - name: generate-podcast-digest
      description: 'Generate a podcast analytics digest: fetch metrics, summarize with AI, and distribute to content team.'
      inputParameters:
      - name: show_id
        in: body
        type: string
        description: The Apple Podcasts show identifier.
      - name: period
        in: body
        type: string
        description: The reporting period, e.g. last_7d, last_30d.
      steps:
      - name: fetch-analytics
        type: call
        call: podcasts-connect.get-analytics
        with:
          show_id: '{{show_id}}'
          period: '{{period}}'
      - name: summarize-performance
        type: call
        call: openai.analyze-text
        with:
          text: 'Downloads: {{fetch-analytics.total_downloads}}, Listeners: {{fetch-analytics.unique_listeners}}, Avg completion: {{fetch-analytics.avg_completion_rate}}%, Top episode: {{fetch-analytics.top_episode}}'
          instruction: Summarize podcast performance. Highlight trends, top content, and growth recommendations.
      - name: post-to-slack
        type: call
        call: slack.post-message
        with:
          channel: '#podcast-content'
          text: 'Podcast digest for {{show_id}} ({{period}}):

            {{summarize-performance.summary}}'
  consumes:
  - type: http
    namespace: podcasts-connect
    baseUri: https://api.podcastsconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.podcasts_connect_token
    resources:
    - name: analytics
      path: /shows/{{show_id}}/analytics?period={{period}}
      inputParameters:
      - name: show_id
        in: path
      - name: period
        in: query
      operations:
      - name: get-analytics
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        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 → apple-podcast-analytics-digest.yml

When a negative App Store review is detected, analyzes sentiment with OpenAI, creates a Jira bug ticket, and notifies the product team via Slack.

naftiko: '0.5'
info:
  label: App Store Review to Jira Ticket
  description: When a negative App Store review is detected, analyzes sentiment with OpenAI, creates a Jira bug ticket, and notifies the product team via Slack.
  tags:
  - app-store
  - quality-assurance
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: review-to-jira
    port: 8080
    tools:
    - name: escalate-negative-review
      description: Given an App Store review ID, analyze its sentiment, create a Jira ticket if negative, and alert the product team on Slack.
      inputParameters:
      - name: review_id
        in: body
        type: string
        description: The App Store review identifier.
      - name: app_id
        in: body
        type: string
        description: The App Store app identifier.
      steps:
      - name: fetch-review
        type: call
        call: appstoreconnect.get-review
        with:
          review_id: '{{review_id}}'
          app_id: '{{app_id}}'
      - name: analyze-sentiment
        type: call
        call: openai.analyze-text
        with:
          text: '{{fetch-review.body}}'
          instruction: Classify the sentiment as positive, neutral, or negative. Return JSON with sentiment and key_issues array.
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project: IOS
          summary: 'Negative App Store review: {{fetch-review.title}}'
          description: 'Review: {{fetch-review.body}}

            Sentiment: {{analyze-sentiment.sentiment}}

            Issues: {{analyze-sentiment.key_issues}}'
          issue_type: Bug
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#app-reviews'
          text: 'Negative review escalated for app {{app_id}}: {{fetch-review.title}}. Jira: {{create-jira-ticket.key}}'
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: reviews
      path: /apps/{{app_id}}/customerReviews/{{review_id}}
      inputParameters:
      - name: app_id
        in: path
      - name: review_id
        in: path
      operations:
      - name: get-review
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        method: POST
  - type: http
    namespace: jira
    baseUri: https://apple-eng.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → app-store-review-to-jira-ticket.yml

Downloads a daily sales report from App Store Connect for a given vendor number and date.

naftiko: '0.5'
info:
  label: App Store Sales Report Download
  description: Downloads a daily sales report from App Store Connect for a given vendor number and date.
  tags:
  - app-store
  - sales
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: appstore-sales
    port: 8080
    tools:
    - name: download-sales-report
      description: Download a daily App Store sales report for a vendor. Returns aggregated units, proceeds, and top-selling app.
      inputParameters:
      - name: vendor_number
        in: body
        type: string
        description: The App Store Connect vendor number.
      - name: report_date
        in: body
        type: string
        description: The report date in YYYY-MM-DD format.
      call: appstoreconnect.get-sales-report
      with:
        vendor_number: '{{vendor_number}}'
        report_date: '{{report_date}}'
      outputParameters:
      - name: total_units
        type: number
        mapping: $.summary.totalUnits
      - name: total_proceeds
        type: number
        mapping: $.summary.totalProceeds
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: sales-reports
      path: /salesReports?filter[vendorNumber]={{vendor_number}}&filter[reportDate]={{report_date}}&filter[reportType]=SALES&filter[frequency]=DAILY
      inputParameters:
      - name: vendor_number
        in: query
      - name: report_date
        in: query
      operations:
      - name: get-sales-report
        method: GET
Open in Framework → View in Fleet → app-store-sales-report-download.yml

When a Zoom meeting recording is available, retrieves the transcript, submits it to OpenAI for a summary, and posts the summary to the relevant Slack channel.

naftiko: '0.5'
info:
  label: Zoom Meeting Recording Transcript Distribution
  description: When a Zoom meeting recording is available, retrieves the transcript, submits it to OpenAI for a summary, and posts the summary to the relevant Slack channel.
  tags:
  - communication
  - zoom
  - openai
  - ai
  - slack
capability:
  exposes:
  - type: mcp
    namespace: meeting-intelligence
    port: 8080
    tools:
    - name: summarize-meeting-recording
      description: Given a Zoom meeting ID and Slack channel, retrieve the recording transcript, generate an AI summary with OpenAI, and post it to Slack.
      inputParameters:
      - name: zoom_meeting_id
        in: body
        type: string
        description: The Zoom meeting ID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to post the summary to.
      steps:
      - name: get-recording
        type: call
        call: zoom.get-recording
        with:
          meeting_id: '{{zoom_meeting_id}}'
      - name: summarize
        type: call
        call: openai-zoom.create-completion
        with:
          model: gpt-4o
          prompt: 'Summarize this meeting transcript with: Key Decisions, Action Items (owner + due date), and Next Steps: {{get-recording.transcript}}'
      - name: post-summary
        type: call
        call: slack-zoom.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Meeting Summary ({{zoom_meeting_id}}): {{summarize.text}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: recordings
      path: /meetings/{{meeting_id}}/recordings
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-recording
        method: GET
  - type: http
    namespace: openai-zoom
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
  - type: http
    namespace: slack-zoom
    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 → zoom-meeting-recording-transcript-distribution.yml

Automates Apple Developer certificate rotation by generating a new signing certificate, updating the provisioning profile, notifying the CI pipeline, and alerting the team.

naftiko: '0.5'
info:
  label: Developer Certificate Rotation Workflow
  description: Automates Apple Developer certificate rotation by generating a new signing certificate, updating the provisioning profile, notifying the CI pipeline, and alerting the team.
  tags:
  - developer-tools
  - security
  - certificates
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: cert-rotation
    port: 8080
    tools:
    - name: rotate-signing-certificate
      description: 'Rotate an Apple Developer signing certificate: generate new cert, update provisioning profile, trigger CI, and alert team.'
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: The Apple Developer team ID.
      - name: certificate_type
        in: body
        type: string
        description: Certificate type, e.g. IOS_DISTRIBUTION, DEVELOPER_ID_APPLICATION.
      steps:
      - name: create-certificate
        type: call
        call: appstoreconnect.create-certificate
        with:
          team_id: '{{team_id}}'
          certificate_type: '{{certificate_type}}'
      - name: update-profile
        type: call
        call: appstoreconnect.regenerate-profile
        with:
          certificate_id: '{{create-certificate.certificate_id}}'
          team_id: '{{team_id}}'
      - name: trigger-ci-rebuild
        type: call
        call: github.dispatch-workflow
        with:
          repo: apple/ios-app
          workflow: build-and-sign.yml
          ref: main
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#ios-dev-ops'
          text: 'Certificate rotated for team {{team_id}}. New cert: {{create-certificate.certificate_id}}. Profile: {{update-profile.profile_id}}. CI triggered: {{trigger-ci-rebuild.run_id}}'
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: certificates
      path: /certificates
      operations:
      - name: create-certificate
        method: POST
    - name: profiles
      path: /profiles/{{certificate_id}}/regenerate
      inputParameters:
      - name: certificate_id
        in: path
      operations:
      - name: regenerate-profile
        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: dispatch-workflow
        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 → developer-certificate-rotation-workflow.yml

Looks up a Swift package in the Apple Swift Package Registry by name, returning latest version, dependencies, and platforms.

naftiko: '0.5'
info:
  label: Swift Package Registry Lookup
  description: Looks up a Swift package in the Apple Swift Package Registry by name, returning latest version, dependencies, and platforms.
  tags:
  - developer-tools
  - swift
  - packages
capability:
  exposes:
  - type: mcp
    namespace: swift-packages
    port: 8080
    tools:
    - name: get-package
      description: Look up a Swift package by scope and name. Returns latest version, supported platforms, and dependency count.
      inputParameters:
      - name: package_scope
        in: body
        type: string
        description: The Swift package scope, e.g. apple.
      - name: package_name
        in: body
        type: string
        description: The Swift package name, e.g. swift-nio.
      call: swift-registry.get-package
      with:
        package_scope: '{{package_scope}}'
        package_name: '{{package_name}}'
      outputParameters:
      - name: latest_version
        type: string
        mapping: $.releases[0].version
      - name: platforms
        type: array
        mapping: $.metadata.platforms
  consumes:
  - type: http
    namespace: swift-registry
    baseUri: https://packages.swift.org/api/v1
    authentication:
      type: bearer
      token: $secrets.swift_registry_token
    resources:
    - name: packages
      path: /{{package_scope}}/{{package_name}}
      inputParameters:
      - name: package_scope
        in: path
      - name: package_name
        in: path
      operations:
      - name: get-package
        method: GET
Open in Framework → View in Fleet → swift-package-registry-lookup.yml

Checks the operational status of iCloud Private Relay for a given region, returning relay health, latency, and any active incidents.

naftiko: '0.5'
info:
  label: iCloud Private Relay Status Check
  description: Checks the operational status of iCloud Private Relay for a given region, returning relay health, latency, and any active incidents.
  tags:
  - privacy
  - security
  - icloud
capability:
  exposes:
  - type: mcp
    namespace: private-relay
    port: 8080
    tools:
    - name: get-relay-status
      description: Check iCloud Private Relay operational status for a region. Returns health status, average latency, and active incident count.
      inputParameters:
      - name: region_code
        in: body
        type: string
        description: ISO 3166-1 alpha-2 region code, e.g. US, GB, DE.
      call: relay-ops.get-status
      with:
        region_code: '{{region_code}}'
      outputParameters:
      - name: health_status
        type: string
        mapping: $.region.healthStatus
      - name: avg_latency_ms
        type: number
        mapping: $.region.avgLatencyMs
      - name: active_incidents
        type: number
        mapping: $.region.activeIncidentCount
  consumes:
  - type: http
    namespace: relay-ops
    baseUri: https://relay-ops.icloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.relay_ops_token
    resources:
    - name: status
      path: /regions/{{region_code}}/status
      inputParameters:
      - name: region_code
        in: path
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → icloud-private-relay-status-check.yml

Retrieves the current status, value, stage, and close date of a Salesforce opportunity by ID for sales pipeline reviews.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Status Lookup
  description: Retrieves the current status, value, stage, and close date of a Salesforce opportunity by ID for sales pipeline reviews.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: crm-sales
    port: 8080
    tools:
    - name: get-opportunity
      description: Look up a Salesforce opportunity by ID. Returns stage, amount, close date, and account name. Use for pipeline reviews or to surface deal context.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity record ID.
      call: salesforce.get-opportunity
      with:
        opportunity_id: '{{opportunity_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: stage
        type: string
        mapping: $.StageName
      - name: amount
        type: number
        mapping: $.Amount
      - name: close_date
        type: string
        mapping: $.CloseDate
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://apple.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
Open in Framework → View in Fleet → salesforce-opportunity-status-lookup.yml

Triggers a Power BI dataset refresh for a business report and posts a Slack notification with a report link when the refresh completes.

naftiko: '0.5'
info:
  label: Power BI Report Refresh and Distribution
  description: Triggers a Power BI dataset refresh for a business report and posts a Slack notification with a report link when the refresh completes.
  tags:
  - data
  - analytics
  - power-bi
  - reporting
  - slack
capability:
  exposes:
  - type: mcp
    namespace: powerbi-ops
    port: 8080
    tools:
    - name: refresh-and-distribute-report
      description: Given a Power BI workspace ID and dataset ID, trigger a refresh and notify a Slack channel with the report URL when complete.
      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.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to notify on completion.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          workspace_id: '{{workspace_id}}'
          dataset_id: '{{dataset_id}}'
      - name: notify-slack
        type: call
        call: slack-pbi.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Power BI dataset {{dataset_id}} refresh triggered in workspace {{workspace_id}}. 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: slack-pbi
    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 → power-bi-report-refresh-and-distribution.yml

Runs thermal validation tests on Apple Silicon chips by triggering test bench execution, collecting sensor data, analyzing results, and filing deviations.

naftiko: '0.5'
info:
  label: Apple Silicon Thermal Test Pipeline
  description: Runs thermal validation tests on Apple Silicon chips by triggering test bench execution, collecting sensor data, analyzing results, and filing deviations.
  tags:
  - silicon-design
  - hardware
  - testing
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: thermal-testing
    port: 8080
    tools:
    - name: run-thermal-validation
      description: 'Run thermal validation on a chip: trigger tests, collect sensor data, analyze results, and file deviations if found.'
      inputParameters:
      - name: chip_model
        in: body
        type: string
        description: The chip model under test, e.g. M4-Pro.
      - name: test_profile
        in: body
        type: string
        description: The thermal test profile, e.g. sustained_load, burst, idle.
      steps:
      - name: trigger-test
        type: call
        call: test-bench.start-thermal-test
        with:
          chip_model: '{{chip_model}}'
          profile: '{{test_profile}}'
      - name: collect-sensor-data
        type: call
        call: test-bench.get-sensor-readings
        with:
          test_run_id: '{{trigger-test.test_run_id}}'
      - name: analyze-results
        type: call
        call: thermal-analysis.evaluate
        with:
          sensor_data: '{{collect-sensor-data.readings}}'
          chip_model: '{{chip_model}}'
          profile: '{{test_profile}}'
      - name: file-deviation
        type: call
        call: jira.create-issue
        with:
          project: SILICON
          summary: 'Thermal deviation: {{chip_model}} under {{test_profile}}'
          description: 'Max temp: {{analyze-results.max_temp_c}}C. Threshold: {{analyze-results.threshold_c}}C. Deviation: {{analyze-results.deviation_c}}C.'
          issue_type: Bug
  consumes:
  - type: http
    namespace: test-bench
    baseUri: https://test-bench.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.test_bench_token
    resources:
    - name: thermal-tests
      path: /thermal/tests
      operations:
      - name: start-thermal-test
        method: POST
    - name: sensors
      path: /tests/{{test_run_id}}/sensors
      inputParameters:
      - name: test_run_id
        in: path
      operations:
      - name: get-sensor-readings
        method: GET
  - type: http
    namespace: thermal-analysis
    baseUri: https://thermal-analysis.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.thermal_analysis_token
    resources:
    - name: evaluation
      path: /evaluate
      operations:
      - name: evaluate
        method: POST
  - type: http
    namespace: jira
    baseUri: https://apple-eng.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → apple-silicon-thermal-test-pipeline.yml

Processes a GDPR/CCPA data subject request by collecting user data from iCloud and Apple ID services, packaging it, and notifying the user and legal team.

naftiko: '0.5'
info:
  label: Privacy Data Request Fulfillment
  description: Processes a GDPR/CCPA data subject request by collecting user data from iCloud and Apple ID services, packaging it, and notifying the user and legal team.
  tags:
  - privacy
  - compliance
  - gdpr
  - legal
capability:
  exposes:
  - type: mcp
    namespace: privacy-dsr
    port: 8080
    tools:
    - name: fulfill-data-request
      description: Given a data subject request ID and Apple ID, collect user data, generate export package, and notify user and legal.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The data subject request identifier.
      - name: apple_id
        in: body
        type: string
        description: The Apple ID of the data subject.
      steps:
      - name: collect-icloud-data
        type: call
        call: icloud.export-user-data
        with:
          apple_id: '{{apple_id}}'
          request_id: '{{request_id}}'
      - name: collect-appleid-data
        type: call
        call: identity.export-user-profile
        with:
          apple_id: '{{apple_id}}'
      - name: create-export-package
        type: call
        call: data-packaging.create-package
        with:
          request_id: '{{request_id}}'
          icloud_data_ref: '{{collect-icloud-data.data_ref}}'
          profile_data_ref: '{{collect-appleid-data.data_ref}}'
      - name: notify-user
        type: call
        call: ses.send-email
        with:
          to: '{{apple_id}}'
          subject: Your Data Request is Ready
          body: 'Your data export for request {{request_id}} is ready for download. Package ID: {{create-export-package.package_id}}.'
  consumes:
  - type: http
    namespace: icloud
    baseUri: https://setup.icloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.icloud_admin_token
    resources:
    - name: exports
      path: /users/{{apple_id}}/export
      inputParameters:
      - name: apple_id
        in: path
      operations:
      - name: export-user-data
        method: POST
  - type: http
    namespace: identity
    baseUri: https://idmsa.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.identity_service_token
    resources:
    - name: profiles
      path: /users/{{apple_id}}/profile/export
      inputParameters:
      - name: apple_id
        in: path
      operations:
      - name: export-user-profile
        method: POST
  - type: http
    namespace: data-packaging
    baseUri: https://privacy-data.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.privacy_data_token
    resources:
    - name: packages
      path: /packages
      operations:
      - name: create-package
        method: POST
  - type: http
    namespace: ses
    baseUri: https://email.us-west-2.amazonaws.com/v2
    authentication:
      type: bearer
      token: $secrets.aws_ses_token
    resources:
    - name: emails
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → privacy-data-request-fulfillment.yml

Retrieves the current health status of Apple's monitored infrastructure hosts and active monitors from Datadog, returning a consolidated health snapshot.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Health Check
  description: Retrieves the current health status of Apple's monitored infrastructure hosts and active monitors from Datadog, returning a consolidated health snapshot.
  tags:
  - observability
  - datadog
  - monitoring
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: get-infrastructure-health
      description: Query Datadog for the current status of all monitored hosts and active alerts for a given environment. Use for ops dashboards and incident triage.
      inputParameters:
      - name: environment
        in: body
        type: string
        description: 'The deployment environment: production, staging, or development.'
      call: datadog-health.list-monitors
      with:
        tags: env:{{environment}}
      outputParameters:
      - name: monitors
        type: array
        mapping: $.monitors
  consumes:
  - type: http
    namespace: datadog-health
    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: list-monitors
        method: GET
        inputParameters:
        - name: tags
          in: query
Open in Framework → View in Fleet → datadog-infrastructure-health-check.yml

Manages progressive feature rollout for Apple Intelligence by checking feature flags, enabling for target audience segments, monitoring error rates, and reporting.

naftiko: '0.5'
info:
  label: Apple Intelligence Feature Rollout
  description: Manages progressive feature rollout for Apple Intelligence by checking feature flags, enabling for target audience segments, monitoring error rates, and reporting.
  tags:
  - ai
  - feature-management
  - monitoring
  - apple-intelligence
capability:
  exposes:
  - type: mcp
    namespace: feature-rollout
    port: 8080
    tools:
    - name: rollout-intelligence-feature
      description: 'Progressively roll out an Apple Intelligence feature: check flags, enable for segment, monitor errors, and report status.'
      inputParameters:
      - name: feature_key
        in: body
        type: string
        description: The feature flag key.
      - name: target_segment
        in: body
        type: string
        description: The target audience segment, e.g. beta_users, us_ios18.
      - name: rollout_percent
        in: body
        type: number
        description: The rollout percentage, e.g. 10, 25, 50.
      steps:
      - name: check-flag-status
        type: call
        call: feature-flags.get-flag
        with:
          feature_key: '{{feature_key}}'
      - name: enable-for-segment
        type: call
        call: feature-flags.update-flag
        with:
          feature_key: '{{feature_key}}'
          segment: '{{target_segment}}'
          rollout_percent: '{{rollout_percent}}'
      - name: monitor-errors
        type: call
        call: datadog.query-metrics
        with:
          query: sum:apple_intelligence.errors{feature:{{feature_key}}}.rollup(sum, 3600)
          time_range: last_1h
      - name: report-status
        type: call
        call: slack.post-message
        with:
          channel: '#apple-intelligence'
          text: 'Feature {{feature_key}} rolled out to {{rollout_percent}}% of {{target_segment}}. Previous state: {{check-flag-status.current_percent}}%. Error rate: {{monitor-errors.error_count}} errors/hr.'
  consumes:
  - type: http
    namespace: feature-flags
    baseUri: https://feature-flags.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.feature_flags_token
    resources:
    - name: flags
      path: /flags/{{feature_key}}
      inputParameters:
      - name: feature_key
        in: path
      operations:
      - name: get-flag
        method: GET
      - name: update-flag
        method: PUT
  - 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: metrics
      path: /query
      operations:
      - name: query-metrics
        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 → apple-intelligence-feature-rollout.yml

When an employee changes roles in Workday, updates their Okta group memberships and notifies the new manager via Slack.

naftiko: '0.5'
info:
  label: Workday Role Change Provisioning
  description: When an employee changes roles in Workday, updates their Okta group memberships and notifies the new manager via Slack.
  tags:
  - hr
  - identity
  - workday
  - okta
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr-role-change
    port: 8080
    tools:
    - name: sync-role-change
      description: Given a Workday employee ID and new role details, update Okta group assignments for the new role and notify the new manager via Slack.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the employee changing roles.
      - name: new_role
        in: body
        type: string
        description: The new job role or title.
      - name: new_manager_slack_id
        in: body
        type: string
        description: The Slack user ID of the new manager.
      steps:
      - name: get-worker
        type: call
        call: workday-role.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: update-okta-groups
        type: call
        call: okta-role.update-user-groups
        with:
          user_id: '{{get-worker.okta_user_id}}'
          department: '{{get-worker.new_department}}'
      - name: notify-new-manager
        type: call
        call: slack-role.post-message
        with:
          channel: '{{new_manager_slack_id}}'
          text: '{{get-worker.full_name}} has been assigned to your team in role: {{new_role}}. Okta access updated.'
  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: /apple/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-role
    baseUri: https://apple.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_id}}/groups
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: slack-role
    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 → workday-role-change-provisioning.yml

Monitors supplier inventory levels for a component, checks against forecast demand in SAP, and triggers a PagerDuty alert and Slack notification if shortage is detected.

naftiko: '0.5'
info:
  label: Supply Chain Component Shortage Alert
  description: Monitors supplier inventory levels for a component, checks against forecast demand in SAP, and triggers a PagerDuty alert and Slack notification if shortage is detected.
  tags:
  - supply-chain
  - manufacturing
  - sap
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-alert
    port: 8080
    tools:
    - name: check-component-shortage
      description: Given a component part number, check supplier inventory against SAP demand forecast and alert if a shortage is detected.
      inputParameters:
      - name: part_number
        in: body
        type: string
        description: The component part number to check.
      - name: supplier_id
        in: body
        type: string
        description: The supplier identifier.
      steps:
      - name: get-inventory
        type: call
        call: supplier-portal.get-inventory
        with:
          part_number: '{{part_number}}'
          supplier_id: '{{supplier_id}}'
      - name: get-demand-forecast
        type: call
        call: sap.get-demand-forecast
        with:
          material_number: '{{part_number}}'
      - name: alert-pagerduty
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Component shortage alert: {{part_number}}'
          description: 'Supplier {{supplier_id}} inventory: {{get-inventory.quantity_available}}. Forecasted demand: {{get-demand-forecast.forecasted_demand}}.'
          severity: high
          service_id: supply-chain-ops
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#supply-chain-alerts'
          text: 'Shortage alert for {{part_number}} from supplier {{supplier_id}}. Available: {{get-inventory.quantity_available}}, Demand: {{get-demand-forecast.forecasted_demand}}. PagerDuty: {{alert-pagerduty.incident_id}}'
  consumes:
  - type: http
    namespace: supplier-portal
    baseUri: https://supplier-portal.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.supplier_portal_token
    resources:
    - name: inventory
      path: /suppliers/{{supplier_id}}/inventory/{{part_number}}
      inputParameters:
      - name: supplier_id
        in: path
      - name: part_number
        in: path
      operations:
      - name: get-inventory
        method: GET
  - type: http
    namespace: sap
    baseUri: https://sap.apple.com/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: demand
      path: /demand-forecast/{{material_number}}
      inputParameters:
      - name: material_number
        in: path
      operations:
      - name: get-demand-forecast
        method: GET
  - 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 → supply-chain-component-shortage-alert.yml

When a qualifying LinkedIn signal occurs, enriches the Salesforce contact and alerts the owning sales rep in Slack.

naftiko: '0.5'
info:
  label: Sales Intelligence Enrichment from LinkedIn
  description: When a qualifying LinkedIn signal occurs, enriches the Salesforce contact and alerts the owning sales rep in Slack.
  tags:
  - sales
  - crm
  - salesforce
  - linkedin
  - slack
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, fetch the LinkedIn profile, update the Salesforce contact, and notify the owning sales rep via Slack.
      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: rep_slack_id
        in: body
        type: string
        description: The Slack user ID of the owning sales rep.
      steps:
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-profile
        with:
          member_urn: '{{linkedin_member_urn}}'
      - name: enrich-salesforce
        type: call
        call: salesforce-si.update-contact
        with:
          contact_id: '{{salesforce_contact_id}}'
          title: '{{get-linkedin-profile.headline}}'
          linkedin_profile: https://www.linkedin.com/in/{{get-linkedin-profile.vanityName}}
      - name: alert-rep
        type: call
        call: slack-si.post-message
        with:
          channel: '{{rep_slack_id}}'
          text: 'Lead Enriched: {{get-linkedin-profile.firstName}} {{get-linkedin-profile.lastName}} | Title: {{get-linkedin-profile.headline}} | 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-si
    baseUri: https://apple.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: slack-si
    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 → sales-intelligence-enrichment-from-linkedin.yml

Searches for prior art related to a patent application by querying patent databases, analyzing relevance with AI, and generating a prior art report for the legal team.

naftiko: '0.5'
info:
  label: Apple Patent Prior Art Search
  description: Searches for prior art related to a patent application by querying patent databases, analyzing relevance with AI, and generating a prior art report for the legal team.
  tags:
  - legal
  - intellectual-property
  - ai
  - research
capability:
  exposes:
  - type: mcp
    namespace: patent-search
    port: 8080
    tools:
    - name: search-prior-art
      description: 'Search for prior art: query patent databases, analyze relevance with AI, and generate a report for the legal team.'
      inputParameters:
      - name: patent_title
        in: body
        type: string
        description: The patent application title.
      - name: abstract
        in: body
        type: string
        description: The patent application abstract.
      - name: classification_code
        in: body
        type: string
        description: The IPC classification code.
      steps:
      - name: search-patents
        type: call
        call: patent-db.search
        with:
          query: '{{patent_title}}'
          classification: '{{classification_code}}'
      - name: analyze-relevance
        type: call
        call: openai.analyze-text
        with:
          text: 'Application abstract: {{abstract}}


            Potential prior art results: {{search-patents.results}}'
          instruction: Analyze each prior art result for relevance to the application. Score 0-100 for overlap. Return JSON with ranked results and analysis.
      - name: generate-report
        type: call
        call: confluence.create-page
        with:
          space_key: LEGAL
          title: 'Prior Art Report: {{patent_title}}'
          body: '{{analyze-relevance.report}}. Total results: {{search-patents.total_count}}. High-relevance matches: {{analyze-relevance.high_relevance_count}}.'
      - name: notify-legal
        type: call
        call: slack.post-message
        with:
          channel: '#ip-legal'
          text: 'Prior art search complete for ''{{patent_title}}''. {{analyze-relevance.high_relevance_count}} high-relevance matches found. Report: {{generate-report.url}}'
  consumes:
  - type: http
    namespace: patent-db
    baseUri: https://patent-search.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.patent_db_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search
        method: POST
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://apple-eng.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: 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 → apple-patent-prior-art-search.yml

Returns current headcount by department and cost center from Workday, for use in finance planning and headcount reporting.

naftiko: '0.5'
info:
  label: Payroll Headcount Snapshot
  description: Returns current headcount by department and cost center from Workday, for use in finance planning and headcount reporting.
  tags:
  - hr
  - finance
  - reporting
  - workday
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-by-department
      description: Returns a list of active Apple employees grouped by department and cost center from Workday. Use for headcount planning, budget reviews, and workforce analytics.
      call: workday-hc.headcount-report
      outputParameters:
      - name: employees
        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: headcount
      path: /apple/reports/headcount
      operations:
      - name: headcount-report
        method: GET
Open in Framework → View in Fleet → payroll-headcount-snapshot.yml

Processes Apple Card transaction disputes by fetching transaction details, submitting a dispute to Goldman Sachs, creating a case in ServiceNow, and notifying the cardholder.

naftiko: '0.5'
info:
  label: Apple Card Dispute Processing
  description: Processes Apple Card transaction disputes by fetching transaction details, submitting a dispute to Goldman Sachs, creating a case in ServiceNow, and notifying the cardholder.
  tags:
  - fintech
  - apple-card
  - dispute
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: card-disputes
    port: 8080
    tools:
    - name: process-dispute
      description: 'Process an Apple Card dispute: fetch transaction, submit to bank, create support case, and notify cardholder.'
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The Apple Card transaction identifier.
      - name: dispute_reason
        in: body
        type: string
        description: The dispute reason code.
      - name: cardholder_email
        in: body
        type: string
        description: The cardholder email address.
      steps:
      - name: get-transaction
        type: call
        call: apple-card-api.get-transaction
        with:
          transaction_id: '{{transaction_id}}'
      - name: submit-dispute
        type: call
        call: apple-card-api.create-dispute
        with:
          transaction_id: '{{transaction_id}}'
          reason: '{{dispute_reason}}'
          amount: '{{get-transaction.amount}}'
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Apple Card dispute: {{transaction_id}}'
          description: 'Amount: ${{get-transaction.amount}}. Merchant: {{get-transaction.merchant_name}}. Reason: {{dispute_reason}}. Bank ref: {{submit-dispute.dispute_id}}.'
          category: financial_disputes
      - name: notify-cardholder
        type: call
        call: ses.send-email
        with:
          to: '{{cardholder_email}}'
          subject: Your Apple Card Dispute Has Been Filed
          body: 'Dispute for ${{get-transaction.amount}} at {{get-transaction.merchant_name}} has been submitted. Reference: {{submit-dispute.dispute_id}}. Case: {{create-case.number}}.'
  consumes:
  - type: http
    namespace: apple-card-api
    baseUri: https://card-services.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.apple_card_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
    - name: disputes
      path: /disputes
      operations:
      - name: create-dispute
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://apple.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: ses
    baseUri: https://email.us-west-2.amazonaws.com/v2
    authentication:
      type: bearer
      token: $secrets.aws_ses_token
    resources:
    - name: emails
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → apple-card-dispute-processing.yml

Pulls wafer test results from the fab database, runs yield analysis in Snowflake, generates a report, and posts findings to the engineering Slack channel.

naftiko: '0.5'
info:
  label: Silicon Wafer Yield Analysis Pipeline
  description: Pulls wafer test results from the fab database, runs yield analysis in Snowflake, generates a report, and posts findings to the engineering Slack channel.
  tags:
  - silicon-design
  - manufacturing
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: wafer-yield
    port: 8080
    tools:
    - name: analyze-wafer-yield
      description: Given a wafer lot ID, pull test data, run yield analysis, generate report, and share results with engineering.
      inputParameters:
      - name: lot_id
        in: body
        type: string
        description: The wafer lot identifier.
      - name: fab_site
        in: body
        type: string
        description: The fabrication site code, e.g. TSMC-F16.
      steps:
      - name: get-test-results
        type: call
        call: fab-db.get-wafer-tests
        with:
          lot_id: '{{lot_id}}'
          fab_site: '{{fab_site}}'
      - name: run-yield-analysis
        type: call
        call: snowflake.execute-query
        with:
          query: CALL silicon_analytics.analyze_yield('{{lot_id}}', '{{fab_site}}')
          warehouse: SILICON_WH
      - name: generate-report
        type: call
        call: confluence.create-page
        with:
          space_key: SILICON
          title: 'Yield Report: Lot {{lot_id}} - {{fab_site}}'
          body: 'Yield: {{run-yield-analysis.yield_percent}}%. Defects: {{run-yield-analysis.defect_count}}. Good dies: {{run-yield-analysis.good_dies}}.'
      - name: notify-engineering
        type: call
        call: slack.post-message
        with:
          channel: '#silicon-engineering'
          text: 'Yield report for lot {{lot_id}} at {{fab_site}}: {{run-yield-analysis.yield_percent}}% yield. Report: {{generate-report.url}}'
  consumes:
  - type: http
    namespace: fab-db
    baseUri: https://fab-data.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.fab_db_token
    resources:
    - name: wafer-tests
      path: /lots/{{lot_id}}/tests?site={{fab_site}}
      inputParameters:
      - name: lot_id
        in: path
      - name: fab_site
        in: query
      operations:
      - name: get-wafer-tests
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://apple.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://apple-eng.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: 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 → silicon-wafer-yield-analysis-pipeline.yml

Automates corporate travel booking by checking policy compliance in SAP Concur, booking flights, creating a calendar event, and notifying the traveler and manager.

naftiko: '0.5'
info:
  label: Apple Corporate Travel Booking Workflow
  description: Automates corporate travel booking by checking policy compliance in SAP Concur, booking flights, creating a calendar event, and notifying the traveler and manager.
  tags:
  - travel
  - sap-concur
  - operations
  - workforce-management
capability:
  exposes:
  - type: mcp
    namespace: corporate-travel
    port: 8080
    tools:
    - name: book-corporate-travel
      description: 'Book corporate travel: check policy, book flights, create calendar event, and notify traveler and manager.'
      inputParameters:
      - name: employee_email
        in: body
        type: string
        description: The traveling employee email.
      - name: destination
        in: body
        type: string
        description: The travel destination city.
      - name: travel_date
        in: body
        type: string
        description: The travel date in ISO 8601 format.
      - name: purpose
        in: body
        type: string
        description: The business purpose of travel.
      steps:
      - name: check-policy
        type: call
        call: concur.check-travel-policy
        with:
          employee_email: '{{employee_email}}'
          destination: '{{destination}}'
          travel_date: '{{travel_date}}'
      - name: book-flight
        type: call
        call: concur.book-flight
        with:
          employee_email: '{{employee_email}}'
          destination: '{{destination}}'
          date: '{{travel_date}}'
          budget: '{{check-policy.approved_budget}}'
      - name: create-calendar-event
        type: call
        call: google-calendar.create-event
        with:
          attendee: '{{employee_email}}'
          title: 'Business Travel: {{destination}}'
          date: '{{travel_date}}'
          description: 'Flight: {{book-flight.flight_number}}. Confirmation: {{book-flight.confirmation_code}}.'
      - name: notify-manager
        type: call
        call: slack.post-message
        with:
          channel: '#travel-approvals'
          text: 'Travel booked for {{employee_email}} to {{destination}} on {{travel_date}}. Flight: {{book-flight.flight_number}}. Purpose: {{purpose}}.'
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_api_token
    resources:
    - name: travel-policy
      path: /travelrequest/policy
      operations:
      - name: check-travel-policy
        method: POST
    - name: flights
      path: /travelrequest/bookings
      operations:
      - name: book-flight
        method: POST
  - type: http
    namespace: google-calendar
    baseUri: https://www.googleapis.com/calendar/v3
    authentication:
      type: bearer
      token: $secrets.google_calendar_token
    resources:
    - name: events
      path: /calendars/primary/events
      operations:
      - name: create-event
        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 → apple-corporate-travel-booking-workflow.yml

When a critical CVE is detected by Qualys, creates a Jira security ticket, triggers a Terraform patch deployment, and escalates via PagerDuty.

naftiko: '0.5'
info:
  label: Security Vulnerability Response Chain
  description: When a critical CVE is detected by Qualys, creates a Jira security ticket, triggers a Terraform patch deployment, and escalates via PagerDuty.
  tags:
  - security
  - vulnerability-management
  - jira
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: vuln-response
    port: 8080
    tools:
    - name: respond-to-vulnerability
      description: Given a CVE ID, fetch vulnerability details, create a security Jira ticket, trigger patching, and escalate via PagerDuty.
      inputParameters:
      - name: cve_id
        in: body
        type: string
        description: The CVE identifier, e.g. CVE-2026-12345.
      - name: affected_hosts
        in: body
        type: string
        description: Comma-separated list of affected hostnames.
      steps:
      - name: get-vuln-details
        type: call
        call: qualys.get-vulnerability
        with:
          cve_id: '{{cve_id}}'
      - name: create-security-ticket
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: 'Critical CVE: {{cve_id}} - {{get-vuln-details.title}}'
          description: 'CVSS: {{get-vuln-details.cvss_score}}. Affected: {{affected_hosts}}. Remediation: {{get-vuln-details.remediation}}'
          issue_type: Security Bug
          priority: Critical
      - name: trigger-patch
        type: call
        call: terraform.trigger-run
        with:
          workspace: security-patches
          message: Auto-patch for {{cve_id}}
      - name: escalate-pagerduty
        type: call
        call: pagerduty.create-incident
        with:
          title: Critical CVE {{cve_id}} detected
          description: 'CVSS: {{get-vuln-details.cvss_score}}. Jira: {{create-security-ticket.key}}. Terraform run: {{trigger-patch.run_id}}.'
          severity: critical
          service_id: security-ops
  consumes:
  - type: http
    namespace: qualys
    baseUri: https://qualysapi.apple.com/api/v2
    authentication:
      type: basic
      username: $secrets.qualys_user
      password: $secrets.qualys_password
    resources:
    - name: vulnerabilities
      path: /fo/knowledge_base/vuln/?action=list&cve_id={{cve_id}}
      inputParameters:
      - name: cve_id
        in: query
      operations:
      - name: get-vulnerability
        method: GET
  - type: http
    namespace: jira
    baseUri: https://apple-eng.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: trigger-run
        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
Open in Framework → View in Fleet → security-vulnerability-response-chain.yml

Retrieves a pending expense report from SAP Concur, validates it against Apple travel policy, and routes it for manager approval via ServiceNow.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Approval
  description: Retrieves a pending expense report from SAP Concur, validates it against Apple travel policy, and routes it for manager approval via ServiceNow.
  tags:
  - finance
  - expense-management
  - sap-concur
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: expense-mgmt
    port: 8080
    tools:
    - name: process-expense-report
      description: Given a SAP Concur expense report ID and employee ID, retrieve the report details and create a ServiceNow approval task for the manager.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: The SAP Concur expense report identifier.
      - name: employee_id
        in: body
        type: string
        description: The employee ID submitting the expense report.
      steps:
      - name: get-expense-report
        type: call
        call: sap-concur.get-expense-report
        with:
          report_id: '{{expense_report_id}}'
      - name: create-approval-task
        type: call
        call: servicenow-exp.create-task
        with:
          short_description: 'Expense approval: {{employee_id}} — {{expense_report_id}}'
          description: 'Amount: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Period: {{get-expense-report.period}}.'
          assignment_group: Finance_Expense
  consumes:
  - type: http
    namespace: sap-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: servicenow-exp
    baseUri: https://apple.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 → sap-concur-expense-report-approval.yml

When CrowdStrike detects a high-severity endpoint threat, creates a ServiceNow security incident, isolates the endpoint, and alerts the SOC team via Slack.

naftiko: '0.5'
info:
  label: CrowdStrike Security Alert Triage
  description: When CrowdStrike detects a high-severity endpoint threat, creates a ServiceNow security incident, isolates the endpoint, and alerts the SOC team via Slack.
  tags:
  - security
  - crowdstrike
  - servicenow
  - incident-response
  - slack
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: handle-endpoint-detection
      description: Given a CrowdStrike detection ID and host ID, create a ServiceNow security incident, isolate the host, and alert the Apple SOC Slack channel.
      inputParameters:
      - name: detection_id
        in: body
        type: string
        description: The CrowdStrike detection ID.
      - name: host_id
        in: body
        type: string
        description: The CrowdStrike host ID for the affected endpoint.
      - name: severity
        in: body
        type: string
        description: 'Detection severity: critical, high, medium, or low.'
      steps:
      - name: create-security-incident
        type: call
        call: servicenow-soc.create-incident
        with:
          short_description: CrowdStrike detection {{detection_id}} — {{severity}} severity
          category: security
          assignment_group: SOC
          urgency: '1'
      - name: isolate-host
        type: call
        call: crowdstrike.contain-host
        with:
          host_id: '{{host_id}}'
      - name: alert-soc-slack
        type: call
        call: slack-soc.post-message
        with:
          channel: '#soc-alerts'
          text: 'SECURITY: CrowdStrike detection {{detection_id}} ({{severity}}) on host {{host_id}}. Host isolated. SNOW: {{create-security-incident.number}}.'
  consumes:
  - type: http
    namespace: servicenow-soc
    baseUri: https://apple.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: crowdstrike
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_token
    resources:
    - name: host-containment
      path: /devices/entities/devices-actions/v2
      operations:
      - name: contain-host
        method: POST
  - type: http
    namespace: slack-soc
    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 → crowdstrike-security-alert-triage.yml

Runs a compliance check on a GitHub repository to verify required branch protection rules, secret scanning, and CODEOWNERS files are configured correctly.

naftiko: '0.5'
info:
  label: GitHub Repository Compliance Check
  description: Runs a compliance check on a GitHub repository to verify required branch protection rules, secret scanning, and CODEOWNERS files are configured correctly.
  tags:
  - devops
  - compliance
  - github
  - security
capability:
  exposes:
  - type: mcp
    namespace: repo-compliance
    port: 8080
    tools:
    - name: check-repository-compliance
      description: Given a GitHub repository name, verify branch protection rules, secret scanning enablement, and CODEOWNERS presence. Returns a compliance report.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository in org/repo format, e.g. apple/swift.
      steps:
      - name: get-branch-protection
        type: call
        call: github-comp.get-branch-protection
        with:
          repo: '{{repo_name}}'
          branch: main
      - name: get-secret-scanning
        type: call
        call: github-comp.get-secret-scanning
        with:
          repo: '{{repo_name}}'
  consumes:
  - type: http
    namespace: github-comp
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branch-protection
      path: /repos/{{repo}}/branches/{{branch}}/protection
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch-protection
        method: GET
    - name: secret-scanning
      path: /repos/{{repo}}/secret-scanning/alerts
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-secret-scanning
        method: GET
Open in Framework → View in Fleet → github-repository-compliance-check.yml

Publishes educational Swift Playground content by validating the package, uploading to the content CDN, registering metadata, and notifying the education team.

naftiko: '0.5'
info:
  label: Swift Playground Content Publishing
  description: Publishes educational Swift Playground content by validating the package, uploading to the content CDN, registering metadata, and notifying the education team.
  tags:
  - developer-tools
  - education
  - swift
  - content-publishing
capability:
  exposes:
  - type: mcp
    namespace: playground-publish
    port: 8080
    tools:
    - name: publish-playground
      description: 'Publish a Swift Playground: validate package, upload to CDN, register metadata, and notify education team.'
      inputParameters:
      - name: package_id
        in: body
        type: string
        description: The Swift Playground package identifier.
      - name: version
        in: body
        type: string
        description: The content version to publish.
      steps:
      - name: validate-package
        type: call
        call: playground-api.validate
        with:
          package_id: '{{package_id}}'
          version: '{{version}}'
      - name: upload-to-cdn
        type: call
        call: cdn-api.upload-asset
        with:
          asset_type: playground
          asset_id: '{{package_id}}'
          version: '{{version}}'
          content_ref: '{{validate-package.content_ref}}'
      - name: register-metadata
        type: call
        call: playground-api.register-version
        with:
          package_id: '{{package_id}}'
          version: '{{version}}'
          cdn_url: '{{upload-to-cdn.asset_url}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#education-content'
          text: 'Swift Playground {{package_id}} v{{version}} published. CDN: {{upload-to-cdn.asset_url}}.'
  consumes:
  - type: http
    namespace: playground-api
    baseUri: https://playground-content.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.playground_api_token
    resources:
    - name: validation
      path: /packages/{{package_id}}/validate
      inputParameters:
      - name: package_id
        in: path
      operations:
      - name: validate
        method: POST
    - name: versions
      path: /packages/{{package_id}}/versions
      inputParameters:
      - name: package_id
        in: path
      operations:
      - name: register-version
        method: POST
  - type: http
    namespace: cdn-api
    baseUri: https://cdn-management.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.cdn_api_token
    resources:
    - name: assets
      path: /assets
      operations:
      - name: upload-asset
        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 → swift-playground-content-publishing.yml

Retrieves article performance analytics for an Apple News publisher channel, including impressions, unique viewers, and shares.

naftiko: '0.5'
info:
  label: Apple News Publisher Analytics
  description: Retrieves article performance analytics for an Apple News publisher channel, including impressions, unique viewers, and shares.
  tags:
  - media
  - apple-news
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: apple-news
    port: 8080
    tools:
    - name: get-article-analytics
      description: Get Apple News article performance metrics by article ID. Returns impressions, unique viewers, and share count.
      inputParameters:
      - name: article_id
        in: body
        type: string
        description: The Apple News article identifier.
      call: news-api.get-analytics
      with:
        article_id: '{{article_id}}'
      outputParameters:
      - name: impressions
        type: number
        mapping: $.analytics.impressions
      - name: unique_viewers
        type: number
        mapping: $.analytics.uniqueViewers
      - name: shares
        type: number
        mapping: $.analytics.shareCount
  consumes:
  - type: http
    namespace: news-api
    baseUri: https://news-api.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.apple_news_api_token
    resources:
    - name: analytics
      path: /articles/{{article_id}}/analytics
      inputParameters:
      - name: article_id
        in: path
      operations:
      - name: get-analytics
        method: GET
Open in Framework → View in Fleet → apple-news-publisher-analytics.yml

Looks up a device in Apple Business Manager by serial number, returning enrollment status, model, and assigned MDM server.

naftiko: '0.5'
info:
  label: Apple Business Manager Device Lookup
  description: Looks up a device in Apple Business Manager by serial number, returning enrollment status, model, and assigned MDM server.
  tags:
  - device-management
  - mdm
  - apple-business-manager
capability:
  exposes:
  - type: mcp
    namespace: abm-devices
    port: 8080
    tools:
    - name: get-device
      description: Look up a device in Apple Business Manager by serial number. Returns enrollment status, device model, and MDM server assignment.
      inputParameters:
      - name: serial_number
        in: body
        type: string
        description: The device serial number.
      call: abm.get-device
      with:
        serial_number: '{{serial_number}}'
      outputParameters:
      - name: model
        type: string
        mapping: $.device.model
      - name: enrollment_status
        type: string
        mapping: $.device.enrollmentStatus
      - name: mdm_server
        type: string
        mapping: $.device.assignedMdmServer
  consumes:
  - type: http
    namespace: abm
    baseUri: https://business.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.abm_api_token
    resources:
    - name: devices
      path: /devices/{{serial_number}}
      inputParameters:
      - name: serial_number
        in: path
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → apple-business-manager-device-lookup.yml

Routes Apple Support cases by analyzing the issue with AI, classifying severity and product area, assigning to the right team in ServiceNow, and notifying the team lead.

naftiko: '0.5'
info:
  label: Apple Support Case Routing AI
  description: Routes Apple Support cases by analyzing the issue with AI, classifying severity and product area, assigning to the right team in ServiceNow, and notifying the team lead.
  tags:
  - customer-service
  - ai
  - servicenow
  - support
capability:
  exposes:
  - type: mcp
    namespace: case-routing
    port: 8080
    tools:
    - name: route-support-case
      description: 'Route a support case: analyze with AI, classify product/severity, assign in ServiceNow, and notify team lead.'
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The support case identifier.
      - name: issue_text
        in: body
        type: string
        description: The customer issue description.
      steps:
      - name: classify-issue
        type: call
        call: openai.analyze-text
        with:
          text: '{{issue_text}}'
          instruction: Classify this Apple Support case. Return JSON with product_area (iPhone, Mac, iPad, Services, etc.), severity (P1-P4), and suggested_team.
      - name: update-case
        type: call
        call: servicenow.update-incident
        with:
          sys_id: '{{case_id}}'
          category: '{{classify-issue.product_area}}'
          priority: '{{classify-issue.severity}}'
          assignment_group: '{{classify-issue.suggested_team}}'
      - name: notify-team-lead
        type: call
        call: slack.post-message
        with:
          channel: '#support-escalations'
          text: 'Case {{case_id}} routed to {{classify-issue.suggested_team}} ({{classify-issue.severity}}). Product: {{classify-issue.product_area}}.'
  consumes:
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://apple.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        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 → apple-support-case-routing-ai.yml

Deploys a Core ML model by pulling the artifact from S3, registering it in the model registry, triggering OTA delivery, and notifying the ML team.

naftiko: '0.5'
info:
  label: ML Model Deployment Pipeline
  description: Deploys a Core ML model by pulling the artifact from S3, registering it in the model registry, triggering OTA delivery, and notifying the ML team.
  tags:
  - machine-learning
  - deployment
  - core-ml
  - s3
capability:
  exposes:
  - type: mcp
    namespace: ml-deploy
    port: 8080
    tools:
    - name: deploy-coreml-model
      description: 'Deploy a Core ML model: fetch artifact from S3, register in model registry, trigger OTA, and notify ML team.'
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The Core ML model name.
      - name: model_version
        in: body
        type: string
        description: The model version to deploy.
      - name: s3_artifact_path
        in: body
        type: string
        description: The S3 path to the compiled model artifact.
      steps:
      - name: fetch-artifact
        type: call
        call: s3.get-object
        with:
          bucket: apple-ml-models
          key: '{{s3_artifact_path}}'
      - name: register-model
        type: call
        call: model-registry.register
        with:
          model_name: '{{model_name}}'
          version: '{{model_version}}'
          artifact_url: '{{fetch-artifact.object_url}}'
      - name: trigger-ota
        type: call
        call: ota-service.push-model
        with:
          model_id: '{{register-model.model_id}}'
          target_os: iOS
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#ml-deployments'
          text: 'Core ML model {{model_name}} v{{model_version}} deployed. Registry ID: {{register-model.model_id}}. OTA status: {{trigger-ota.delivery_status}}.'
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.us-west-2.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /apple-ml-models/{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: get-object
        method: GET
  - type: http
    namespace: model-registry
    baseUri: https://ml-registry.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ml_registry_token
    resources:
    - name: models
      path: /models
      operations:
      - name: register
        method: POST
  - type: http
    namespace: ota-service
    baseUri: https://ota-ml.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ota_ml_token
    resources:
    - name: deployments
      path: /deployments
      operations:
      - name: push-model
        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 → ml-model-deployment-pipeline.yml

Prevents subscription churn by detecting at-risk subscribers, generating personalized retention offers, and sending targeted notifications via APNs.

naftiko: '0.5'
info:
  label: App Store Subscription Churn Prevention
  description: Prevents subscription churn by detecting at-risk subscribers, generating personalized retention offers, and sending targeted notifications via APNs.
  tags:
  - app-store
  - subscriptions
  - retention
  - machine-learning
capability:
  exposes:
  - type: mcp
    namespace: churn-prevention
    port: 8080
    tools:
    - name: prevent-subscriber-churn
      description: Detect at-risk subscribers, generate personalized offers, and send retention notifications.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The app identifier.
      - name: subscriber_id
        in: body
        type: string
        description: The subscriber identifier.
      steps:
      - name: assess-churn-risk
        type: call
        call: churn-ml.score-subscriber
        with:
          app_id: '{{app_id}}'
          subscriber_id: '{{subscriber_id}}'
      - name: generate-offer
        type: call
        call: offers-engine.create-retention-offer
        with:
          subscriber_id: '{{subscriber_id}}'
          churn_score: '{{assess-churn-risk.churn_probability}}'
          usage_pattern: '{{assess-churn-risk.usage_pattern}}'
      - name: send-notification
        type: call
        call: apns.send-notification
        with:
          subscriber_id: '{{subscriber_id}}'
          title: Special offer just for you
          body: '{{generate-offer.offer_message}}'
      - name: log-intervention
        type: call
        call: snowflake.execute-query
        with:
          query: INSERT INTO churn_interventions VALUES ('{{subscriber_id}}', '{{app_id}}', {{assess-churn-risk.churn_probability}}, '{{generate-offer.offer_id}}', current_timestamp())
          warehouse: ANALYTICS_WH
  consumes:
  - type: http
    namespace: churn-ml
    baseUri: https://churn-prediction.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.churn_ml_token
    resources:
    - name: scoring
      path: /subscribers/{{subscriber_id}}/score
      inputParameters:
      - name: subscriber_id
        in: path
      operations:
      - name: score-subscriber
        method: GET
  - type: http
    namespace: offers-engine
    baseUri: https://offers.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.offers_engine_token
    resources:
    - name: offers
      path: /retention-offers
      operations:
      - name: create-retention-offer
        method: POST
  - type: http
    namespace: apns
    baseUri: https://api.push.apple.com/v3
    authentication:
      type: bearer
      token: $secrets.apns_auth_token
    resources:
    - name: notifications
      path: /notifications
      operations:
      - name: send-notification
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://apple.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → app-store-subscription-churn-prevention.yml

When a candidate applies via LinkedIn Recruiter, enriches their profile in Workday Recruiting and notifies the hiring manager via Slack.

naftiko: '0.5'
info:
  label: LinkedIn Talent Acquisition Signal
  description: When a candidate applies via LinkedIn Recruiter, enriches their profile in Workday Recruiting and notifies the hiring manager via Slack.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - slack
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: enrich-candidate-profile
      description: Given a LinkedIn member URN and Workday job requisition ID, fetch the LinkedIn profile, create the candidate record in Workday, and notify the hiring manager via Slack.
      inputParameters:
      - name: linkedin_member_urn
        in: body
        type: string
        description: The LinkedIn member URN for the candidate.
      - name: job_req_id
        in: body
        type: string
        description: The Workday job requisition ID.
      - name: hiring_manager_slack_id
        in: body
        type: string
        description: The Slack user ID of the hiring manager.
      steps:
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-profile
        with:
          member_urn: '{{linkedin_member_urn}}'
      - name: create-candidate
        type: call
        call: workday-recruit.create-candidate
        with:
          job_req_id: '{{job_req_id}}'
          first_name: '{{get-linkedin-profile.firstName}}'
          last_name: '{{get-linkedin-profile.lastName}}'
          headline: '{{get-linkedin-profile.headline}}'
      - name: notify-hiring-manager
        type: call
        call: slack-recruit.post-message
        with:
          channel: '{{hiring_manager_slack_id}}'
          text: 'New candidate: {{get-linkedin-profile.firstName}} {{get-linkedin-profile.lastName}} applied for req {{job_req_id}}. Title: {{get-linkedin-profile.headline}}. Workday: {{create-candidate.candidate_id}}.'
  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: workday-recruit
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: candidates
      path: /apple/jobRequisitions/{{job_req_id}}/candidates
      inputParameters:
      - name: job_req_id
        in: path
      operations:
      - name: create-candidate
        method: POST
  - type: http
    namespace: slack-recruit
    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 → linkedin-talent-acquisition-signal.yml

Generates a weekly account health digest from Salesforce, summarizing open opportunities and support cases for strategic accounts, posted to the sales Slack channel.

naftiko: '0.5'
info:
  label: Salesforce Account Health Digest
  description: Generates a weekly account health digest from Salesforce, summarizing open opportunities and support cases for strategic accounts, posted to the sales Slack channel.
  tags:
  - sales
  - crm
  - salesforce
  - reporting
  - slack
capability:
  exposes:
  - type: mcp
    namespace: account-health
    port: 8080
    tools:
    - name: digest-account-health
      description: Given a Salesforce account ID and Slack channel, retrieve open opportunities and support cases, then post a health digest to the sales Slack channel.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to post the health digest to.
      steps:
      - name: get-account
        type: call
        call: salesforce-health.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-opportunities
        type: call
        call: salesforce-health.get-account-opportunities
        with:
          account_id: '{{account_id}}'
      - name: post-digest
        type: call
        call: slack-health.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Account Health: {{get-account.name}} | Open Opps: {{get-opportunities.total_count}} | Pipeline: ${{get-opportunities.total_amount}}'
  consumes:
  - type: http
    namespace: salesforce-health
    baseUri: https://apple.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
    - name: account-opportunities
      path: /sobjects/Account/{{account_id}}/Opportunities
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account-opportunities
        method: GET
  - type: http
    namespace: slack-health
    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 → salesforce-account-health-digest.yml

Retrieves playlist details from Apple Music by playlist ID, including name, track count, curator, and description.

naftiko: '0.5'
info:
  label: Apple Music Playlist Lookup
  description: Retrieves playlist details from Apple Music by playlist ID, including name, track count, curator, and description.
  tags:
  - media
  - apple-music
  - content
capability:
  exposes:
  - type: mcp
    namespace: apple-music
    port: 8080
    tools:
    - name: get-playlist
      description: Look up an Apple Music playlist by ID. Returns playlist name, description, curator name, and track count.
      inputParameters:
      - name: playlist_id
        in: body
        type: string
        description: The Apple Music playlist identifier.
      call: musickit.get-playlist
      with:
        playlist_id: '{{playlist_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.data[0].attributes.name
      - name: track_count
        type: number
        mapping: $.data[0].attributes.trackCount
      - name: curator
        type: string
        mapping: $.data[0].attributes.curatorName
  consumes:
  - type: http
    namespace: musickit
    baseUri: https://api.music.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.musickit_token
    resources:
    - name: playlists
      path: /catalog/us/playlists/{{playlist_id}}
      inputParameters:
      - name: playlist_id
        in: path
      operations:
      - name: get-playlist
        method: GET
Open in Framework → View in Fleet → apple-music-playlist-lookup.yml

Rebalances retail inventory by querying store stock levels, identifying surplus and deficit locations, generating transfer orders in SAP, and notifying logistics.

naftiko: '0.5'
info:
  label: Apple Store Inventory Rebalancing
  description: Rebalances retail inventory by querying store stock levels, identifying surplus and deficit locations, generating transfer orders in SAP, and notifying logistics.
  tags:
  - retail
  - supply-chain
  - inventory
  - sap
capability:
  exposes:
  - type: mcp
    namespace: inventory-rebalance
    port: 8080
    tools:
    - name: rebalance-product-inventory
      description: Given a product SKU, check stock levels across stores, compute transfer recommendations, create SAP transfer orders, and notify logistics.
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU to rebalance.
      - name: region
        in: body
        type: string
        description: The retail region code, e.g. US-WEST, EMEA.
      steps:
      - name: get-stock-levels
        type: call
        call: retail-api.get-regional-stock
        with:
          product_sku: '{{product_sku}}'
          region: '{{region}}'
      - name: compute-transfers
        type: call
        call: inventory-optimizer.compute-transfers
        with:
          stock_data: '{{get-stock-levels.stores}}'
          product_sku: '{{product_sku}}'
      - name: create-sap-orders
        type: call
        call: sap.create-transfer-order
        with:
          transfers: '{{compute-transfers.transfer_plan}}'
          material_number: '{{product_sku}}'
      - name: notify-logistics
        type: call
        call: slack.post-message
        with:
          channel: '#retail-logistics'
          text: 'Inventory rebalance initiated for {{product_sku}} in {{region}}. {{compute-transfers.transfer_count}} transfers created. SAP order: {{create-sap-orders.order_id}}.'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://retail-internal.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.retail_api_token
    resources:
    - name: stock
      path: /inventory/{{product_sku}}/stock?region={{region}}
      inputParameters:
      - name: product_sku
        in: path
      - name: region
        in: query
      operations:
      - name: get-regional-stock
        method: GET
  - type: http
    namespace: inventory-optimizer
    baseUri: https://inventory-optimizer.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.inventory_optimizer_token
    resources:
    - name: transfers
      path: /optimize/transfers
      operations:
      - name: compute-transfers
        method: POST
  - type: http
    namespace: sap
    baseUri: https://sap.apple.com/api/v1
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: transfer-orders
      path: /transfer-orders
      operations:
      - name: create-transfer-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
Open in Framework → View in Fleet → apple-store-inventory-rebalancing.yml

Optimizes Apple Retail store employee schedules by analyzing foot traffic predictions, current staffing, and generating optimized shift assignments in Workday.

naftiko: '0.5'
info:
  label: Retail Employee Schedule Optimizer
  description: Optimizes Apple Retail store employee schedules by analyzing foot traffic predictions, current staffing, and generating optimized shift assignments in Workday.
  tags:
  - retail
  - workforce-management
  - workday
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: schedule-optimizer
    port: 8080
    tools:
    - name: optimize-store-schedule
      description: 'Optimize retail employee schedules: analyze traffic predictions, review current staffing, generate shift assignments, and update Workday.'
      inputParameters:
      - name: store_number
        in: body
        type: string
        description: The Apple Retail Store number.
      - name: week_start
        in: body
        type: string
        description: The week start date in ISO 8601 format.
      steps:
      - name: get-traffic-forecast
        type: call
        call: retail-analytics.get-traffic-prediction
        with:
          store_number: '{{store_number}}'
          week_start: '{{week_start}}'
      - name: get-current-staff
        type: call
        call: workday.get-store-roster
        with:
          store_number: '{{store_number}}'
      - name: generate-schedule
        type: call
        call: schedule-engine.optimize
        with:
          traffic_forecast: '{{get-traffic-forecast.hourly_predictions}}'
          staff_roster: '{{get-current-staff.employees}}'
          store_number: '{{store_number}}'
      - name: publish-schedule
        type: call
        call: workday.publish-schedule
        with:
          store_number: '{{store_number}}'
          schedule: '{{generate-schedule.optimized_shifts}}'
          week_start: '{{week_start}}'
  consumes:
  - type: http
    namespace: retail-analytics
    baseUri: https://retail-analytics.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.retail_analytics_token
    resources:
    - name: traffic
      path: /stores/{{store_number}}/traffic/prediction
      inputParameters:
      - name: store_number
        in: path
      operations:
      - name: get-traffic-prediction
        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: rosters
      path: /apple/stores/{{store_number}}/roster
      inputParameters:
      - name: store_number
        in: path
      operations:
      - name: get-store-roster
        method: GET
    - name: schedules
      path: /apple/stores/{{store_number}}/schedules
      inputParameters:
      - name: store_number
        in: path
      operations:
      - name: publish-schedule
        method: POST
  - type: http
    namespace: schedule-engine
    baseUri: https://schedule-engine.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.schedule_engine_token
    resources:
    - name: optimization
      path: /optimize
      operations:
      - name: optimize
        method: POST
Open in Framework → View in Fleet → retail-employee-schedule-optimizer.yml

Triggers a Tableau workbook extract refresh and notifies stakeholders via Slack when the refresh completes or fails.

naftiko: '0.5'
info:
  label: Tableau Dashboard Refresh Trigger
  description: Triggers a Tableau workbook extract refresh and notifies stakeholders via Slack when the refresh completes or fails.
  tags:
  - data
  - analytics
  - tableau
  - reporting
  - slack
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-tableau-workbook
      description: Given a Tableau workbook ID and site name, trigger an extract refresh and notify stakeholders via Slack.
      inputParameters:
      - name: workbook_id
        in: body
        type: string
        description: The Tableau workbook ID to refresh.
      - name: site_name
        in: body
        type: string
        description: The Tableau site name, e.g. apple.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to notify on completion.
      steps:
      - name: trigger-refresh
        type: call
        call: tableau.refresh-workbook
        with:
          workbook_id: '{{workbook_id}}'
          site: '{{site_name}}'
      - name: notify-stakeholders
        type: call
        call: slack-tableau.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Tableau workbook {{workbook_id}} refresh triggered. Job ID: {{trigger-refresh.job_id}}.'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.apple.com/api/2.8
    authentication:
      type: apikey
      key: X-Tableau-Auth
      value: $secrets.tableau_token
      placement: header
    resources:
    - name: workbook-refresh
      path: /sites/{{site}}/workbooks/{{workbook_id}}/refresh
      inputParameters:
      - name: site
        in: path
      - name: workbook_id
        in: path
      operations:
      - name: refresh-workbook
        method: POST
  - type: http
    namespace: slack-tableau
    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 → tableau-dashboard-refresh-trigger.yml

Reconciles in-app purchase records by fetching App Store Server receipts, comparing with internal billing, flagging discrepancies, and notifying finance.

naftiko: '0.5'
info:
  label: App Store In-App Purchase Reconciliation
  description: Reconciles in-app purchase records by fetching App Store Server receipts, comparing with internal billing, flagging discrepancies, and notifying finance.
  tags:
  - app-store
  - finance
  - billing
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: iap-reconciliation
    port: 8080
    tools:
    - name: reconcile-iap
      description: 'Reconcile in-app purchases: fetch receipts, compare with billing, flag discrepancies, and notify finance.'
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The app identifier.
      - name: date
        in: body
        type: string
        description: The reconciliation date in YYYY-MM-DD format.
      steps:
      - name: fetch-receipts
        type: call
        call: appstore-server.get-transactions
        with:
          app_id: '{{app_id}}'
          date: '{{date}}'
      - name: get-billing-records
        type: call
        call: billing-api.get-daily-records
        with:
          app_id: '{{app_id}}'
          date: '{{date}}'
      - name: compare-records
        type: call
        call: reconciliation-engine.compare
        with:
          appstore_data: '{{fetch-receipts.transactions}}'
          billing_data: '{{get-billing-records.records}}'
      - name: notify-finance
        type: call
        call: slack.post-message
        with:
          channel: '#finance-reconciliation'
          text: 'IAP reconciliation for {{app_id}} on {{date}}: Matched={{compare-records.matched}}, Discrepancies={{compare-records.discrepancy_count}}, Total revenue: ${{compare-records.total_revenue}}.'
  consumes:
  - type: http
    namespace: appstore-server
    baseUri: https://api.storekit.itunes.apple.com/inApps/v1
    authentication:
      type: bearer
      token: $secrets.appstore_server_token
    resources:
    - name: transactions
      path: /apps/{{app_id}}/transactions?date={{date}}
      inputParameters:
      - name: app_id
        in: path
      - name: date
        in: query
      operations:
      - name: get-transactions
        method: GET
  - type: http
    namespace: billing-api
    baseUri: https://billing.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.billing_api_token
    resources:
    - name: records
      path: /apps/{{app_id}}/records?date={{date}}
      inputParameters:
      - name: app_id
        in: path
      - name: date
        in: query
      operations:
      - name: get-daily-records
        method: GET
  - type: http
    namespace: reconciliation-engine
    baseUri: https://reconciliation.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.reconciliation_token
    resources:
    - name: comparisons
      path: /compare
      operations:
      - name: compare
        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 → app-store-in-app-purchase-reconciliation.yml

Calculates estimated travel time and distance between two locations using the Apple Maps API, returning route ETA and step-by-step directions.

naftiko: '0.5'
info:
  label: Apple Maps Route ETA Lookup
  description: Calculates estimated travel time and distance between two locations using the Apple Maps API, returning route ETA and step-by-step directions.
  tags:
  - apple-maps
  - routing
  - geolocation
capability:
  exposes:
  - type: mcp
    namespace: apple-maps-route
    port: 8080
    tools:
    - name: get-route-eta
      description: Get estimated travel time and distance between an origin and destination using Apple Maps.
      inputParameters:
      - name: origin
        in: body
        type: string
        description: Origin coordinates as latitude,longitude.
      - name: destination
        in: body
        type: string
        description: Destination coordinates as latitude,longitude.
      - name: transport_type
        in: body
        type: string
        description: 'Transport type: Automobile, Walking, or Transit.'
      call: applemaps.get-directions
      with:
        origin: '{{origin}}'
        destination: '{{destination}}'
        transport_type: '{{transport_type}}'
      outputParameters:
      - name: eta_minutes
        type: number
        mapping: $.routes[0].expectedTravelTimeMinutes
      - name: distance_km
        type: number
        mapping: $.routes[0].distanceMeters
  consumes:
  - type: http
    namespace: applemaps
    baseUri: https://maps-api.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.apple_maps_token
    resources:
    - name: directions
      path: /directions?origin={{origin}}&destination={{destination}}&transportType={{transport_type}}
      inputParameters:
      - name: origin
        in: query
      - name: destination
        in: query
      - name: transport_type
        in: query
      operations:
      - name: get-directions
        method: GET
Open in Framework → View in Fleet → apple-maps-route-eta-lookup.yml

When GitHub Advanced Security finds a critical code scanning alert in an Apple repository, creates a Jira security issue and alerts the AppSec Slack channel.

naftiko: '0.5'
info:
  label: GitHub Security Scan to Jira
  description: When GitHub Advanced Security finds a critical code scanning alert in an Apple repository, creates a Jira security issue and alerts the AppSec Slack channel.
  tags:
  - security
  - devops
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: appsec
    port: 8080
    tools:
    - name: handle-code-scanning-alert
      description: Given a GitHub code scanning alert ID and repository, create a Jira security issue for remediation and notify the AppSec Slack channel.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository in org/repo format.
      - name: alert_number
        in: body
        type: integer
        description: The GitHub code scanning alert number.
      - name: alert_severity
        in: body
        type: string
        description: 'Alert severity: critical, high, medium, or low.'
      - name: rule_description
        in: body
        type: string
        description: The code scanning rule description.
      steps:
      - name: get-alert
        type: call
        call: github.get-code-scanning-alert
        with:
          repo: '{{repo_name}}'
          alert_number: '{{alert_number}}'
      - name: create-security-issue
        type: call
        call: jira-appsec.create-issue
        with:
          project_key: SEC
          issuetype: Security Vulnerability
          summary: '[{{alert_severity}}] {{rule_description}} in {{repo_name}}'
          description: 'GitHub alert #{{alert_number}} in {{repo_name}}. Rule: {{rule_description}}. File: {{get-alert.file_path}}.'
      - name: alert-appsec
        type: call
        call: slack-appsec.post-message
        with:
          channel: '#appsec-alerts'
          text: 'Code Scan Alert: {{repo_name}} | {{alert_severity}} | {{rule_description}} | Jira: {{create-security-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/{{alert_number}}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-code-scanning-alert
        method: GET
  - type: http
    namespace: jira-appsec
    baseUri: https://apple.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-appsec
    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-security-scan-to-jira.yml

Analyzes App Clip performance by fetching launch metrics from App Store Connect, querying analytics in Snowflake, and posting a weekly digest to the product team.

naftiko: '0.5'
info:
  label: App Clip Performance Analysis
  description: Analyzes App Clip performance by fetching launch metrics from App Store Connect, querying analytics in Snowflake, and posting a weekly digest to the product team.
  tags:
  - app-store
  - analytics
  - snowflake
  - app-clips
capability:
  exposes:
  - type: mcp
    namespace: app-clip-perf
    port: 8080
    tools:
    - name: analyze-app-clip-performance
      description: Analyze App Clip launch metrics, run analytics queries, and share a performance digest with the product team.
      inputParameters:
      - name: app_clip_id
        in: body
        type: string
        description: The App Clip identifier.
      - name: period
        in: body
        type: string
        description: Analysis period, e.g. last_7d, last_30d.
      steps:
      - name: fetch-metrics
        type: call
        call: appstoreconnect.get-app-clip-metrics
        with:
          app_clip_id: '{{app_clip_id}}'
          period: '{{period}}'
      - name: run-analytics
        type: call
        call: snowflake.execute-query
        with:
          query: SELECT avg(launch_time_ms), count(*), sum(conversions) FROM app_clip_events WHERE clip_id='{{app_clip_id}}' AND event_date >= dateadd(day, -7, current_date())
          warehouse: ANALYTICS_WH
      - name: generate-digest
        type: call
        call: openai.analyze-text
        with:
          text: 'Invocations: {{fetch-metrics.total_invocations}}, Avg launch: {{run-analytics.avg_launch_time_ms}}ms, Conversions: {{run-analytics.total_conversions}}'
          instruction: Summarize App Clip performance. Highlight trends and recommendations.
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: '#app-clips-product'
          text: 'App Clip {{app_clip_id}} {{period}} digest:

            {{generate-digest.summary}}'
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: app-clip-metrics
      path: /appClips/{{app_clip_id}}/metrics
      inputParameters:
      - name: app_clip_id
        in: path
      operations:
      - name: get-app-clip-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://apple.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        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 → app-clip-performance-analysis.yml

Validates app release readiness by checking Xcode Cloud build status, TestFlight crash rate, and App Store review guidelines compliance before submission.

naftiko: '0.5'
info:
  label: App Store Release Readiness Check
  description: Validates app release readiness by checking Xcode Cloud build status, TestFlight crash rate, and App Store review guidelines compliance before submission.
  tags:
  - app-store
  - ci-cd
  - quality-assurance
  - testflight
capability:
  exposes:
  - type: mcp
    namespace: release-readiness
    port: 8080
    tools:
    - name: check-release-readiness
      description: Given an app ID and build number, verify CI build passed, TestFlight crash rate is acceptable, and compliance checks pass.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The App Store Connect app identifier.
      - name: build_number
        in: body
        type: string
        description: The build version number to check.
      steps:
      - name: check-build
        type: call
        call: appstoreconnect.get-build
        with:
          app_id: '{{app_id}}'
          build_number: '{{build_number}}'
      - name: get-crash-rate
        type: call
        call: appstoreconnect.get-crash-metrics
        with:
          app_id: '{{app_id}}'
          build_number: '{{build_number}}'
      - name: run-compliance-check
        type: call
        call: compliance-api.check-guidelines
        with:
          app_id: '{{app_id}}'
          build_id: '{{check-build.build_id}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '#release-management'
          text: 'Release readiness for {{app_id}} build {{build_number}}: Build status={{check-build.status}}, Crash rate={{get-crash-rate.crash_rate_percent}}%, Compliance={{run-compliance-check.result}}'
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: builds
      path: /apps/{{app_id}}/builds?filter[version]={{build_number}}
      inputParameters:
      - name: app_id
        in: path
      - name: build_number
        in: query
      operations:
      - name: get-build
        method: GET
    - name: crash-metrics
      path: /apps/{{app_id}}/builds/{{build_number}}/diagnosticSignatures
      inputParameters:
      - name: app_id
        in: path
      - name: build_number
        in: path
      operations:
      - name: get-crash-metrics
        method: GET
  - type: http
    namespace: compliance-api
    baseUri: https://compliance-internal.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_api_token
    resources:
    - name: guidelines
      path: /checks
      operations:
      - name: check-guidelines
        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 → app-store-release-readiness-check.yml

Generates a daily sprint status digest from Jira, summarizing completed, in-progress, and blocked issues, then posts it to the engineering Slack channel.

naftiko: '0.5'
info:
  label: Jira Sprint Digest Report
  description: Generates a daily sprint status digest from Jira, summarizing completed, in-progress, and blocked issues, then posts it to the engineering Slack channel.
  tags:
  - devops
  - jira
  - reporting
  - sprint
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sprint-reporting
    port: 8080
    tools:
    - name: digest-sprint-status
      description: Given a Jira project key and sprint name, fetch all sprint issues and post a summary digest to the engineering Slack channel. Use for daily stand-up prep and sprint reviews.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key, e.g. SW or HW.
      - name: sprint_name
        in: body
        type: string
        description: The Jira sprint name to summarize.
      - name: slack_channel
        in: body
        type: string
        description: 'The Slack channel to post the digest to, e.g. #engineering-standup.'
      steps:
      - name: get-sprint-issues
        type: call
        call: jira-sprint.search-issues
        with:
          jql: project = {{project_key}} AND sprint = '{{sprint_name}}'
      - name: post-digest
        type: call
        call: slack-sprint.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Sprint Digest — {{project_key}} / {{sprint_name}}: Total: {{get-sprint-issues.total}} | Done: {{get-sprint-issues.done_count}} | In Progress: {{get-sprint-issues.inprogress_count}} | Blocked: {{get-sprint-issues.blocked_count}}'
  consumes:
  - type: http
    namespace: jira-sprint
    baseUri: https://apple.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /search
      operations:
      - name: search-issues
        method: GET
        inputParameters:
        - name: jql
          in: query
  - type: http
    namespace: slack-sprint
    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 → jira-sprint-digest-report.yml

Retrieves beta tester details from TestFlight by email, including invitation status, installed builds, and last active date.

naftiko: '0.5'
info:
  label: TestFlight Beta Tester Lookup
  description: Retrieves beta tester details from TestFlight by email, including invitation status, installed builds, and last active date.
  tags:
  - developer-tools
  - testflight
  - beta-testing
capability:
  exposes:
  - type: mcp
    namespace: testflight
    port: 8080
    tools:
    - name: get-beta-tester
      description: Look up a TestFlight beta tester by email. Returns invitation status, number of installed builds, and last session date.
      inputParameters:
      - name: email
        in: body
        type: string
        description: The beta tester email address.
      call: appstoreconnect.get-beta-tester
      with:
        email: '{{email}}'
      outputParameters:
      - name: first_name
        type: string
        mapping: $.data[0].attributes.firstName
      - name: invitation_status
        type: string
        mapping: $.data[0].attributes.inviteType
      - name: installed_builds
        type: number
        mapping: $.data[0].attributes.installedCfBundleShortVersionStrings.length
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: beta-testers
      path: /betaTesters?filter[email]={{email}}
      inputParameters:
      - name: email
        in: query
      operations:
      - name: get-beta-tester
        method: GET
Open in Framework → View in Fleet → testflight-beta-tester-lookup.yml

Checks the enrollment status and expiration date of an Apple Developer Program membership by team ID.

naftiko: '0.5'
info:
  label: Apple Developer Membership Status
  description: Checks the enrollment status and expiration date of an Apple Developer Program membership by team ID.
  tags:
  - developer-tools
  - membership
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: developer-program
    port: 8080
    tools:
    - name: get-membership-status
      description: Check Apple Developer Program membership status by team ID. Returns enrollment type, expiration date, and renewal status.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: The Apple Developer team identifier.
      call: appstoreconnect.get-membership
      with:
        team_id: '{{team_id}}'
      outputParameters:
      - name: program_type
        type: string
        mapping: $.data.attributes.programType
      - name: expiration_date
        type: string
        mapping: $.data.attributes.expirationDate
      - name: is_active
        type: boolean
        mapping: $.data.attributes.isActive
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: memberships
      path: /teams/{{team_id}}/membership
      inputParameters:
      - name: team_id
        in: path
      operations:
      - name: get-membership
        method: GET
Open in Framework → View in Fleet → apple-developer-membership-status.yml

Creates a ServiceNow change request for infrastructure changes, routes it to CAB, and notifies the requestor via Slack.

naftiko: '0.5'
info:
  label: Change Management Approval Workflow
  description: Creates a ServiceNow change request for infrastructure changes, routes it to CAB, and notifies the requestor via Slack.
  tags:
  - itsm
  - change-management
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: create-change-request
      description: Given change details, create a ServiceNow change request and notify the requestor via Slack. Use for infrastructure and application changes requiring CAB approval.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the change.
      - name: change_type
        in: body
        type: string
        description: 'Change type: normal, standard, or emergency.'
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: low, medium, high, or critical.'
      - name: requestor_slack_id
        in: body
        type: string
        description: The Slack user ID of the change requestor.
      steps:
      - name: create-cr
        type: call
        call: servicenow-chg.create-change
        with:
          short_description: '{{short_description}}'
          type: '{{change_type}}'
          risk: '{{risk_level}}'
          assignment_group: CAB
      - name: notify-requestor
        type: call
        call: slack-chg.post-message
        with:
          channel: '{{requestor_slack_id}}'
          text: 'Change request submitted: {{create-cr.number}}. Type: {{change_type}}. Risk: {{risk_level}}. Pending CAB review.'
  consumes:
  - type: http
    namespace: servicenow-chg
    baseUri: https://apple.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: slack-chg
    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 → change-management-approval-workflow.yml

Monitors Siri intent resolution performance by querying Datadog metrics, comparing against SLOs, and alerting the Siri team if degraded.

naftiko: '0.5'
info:
  label: Siri Intent Performance Monitoring
  description: Monitors Siri intent resolution performance by querying Datadog metrics, comparing against SLOs, and alerting the Siri team if degraded.
  tags:
  - ai
  - siri
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: siri-perf
    port: 8080
    tools:
    - name: check-intent-performance
      description: Check Siri intent resolution performance metrics from Datadog, compare against SLOs, and alert if thresholds breached.
      inputParameters:
      - name: intent_domain
        in: body
        type: string
        description: The Siri intent domain, e.g. com.apple.Siri.messaging.
      - name: time_range
        in: body
        type: string
        description: Time range for metrics, e.g. last_1h, last_24h.
      steps:
      - name: query-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: avg:siri.intent.resolution_time{domain:{{intent_domain}}}.rollup(avg, 300)
          time_range: '{{time_range}}'
      - name: get-slo-thresholds
        type: call
        call: slo-registry.get-slo
        with:
          service: siri
          metric: intent_resolution_time
      - name: evaluate-slo
        type: call
        call: datadog.check-slo-status
        with:
          slo_id: '{{get-slo-thresholds.slo_id}}'
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: '#siri-engineering'
          text: 'Siri intent perf for {{intent_domain}}: Avg resolution={{query-metrics.avg_value}}ms. SLO target={{get-slo-thresholds.target_ms}}ms. SLO status: {{evaluate-slo.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: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
    - name: slo
      path: /slo/{{slo_id}}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: check-slo-status
        method: GET
  - type: http
    namespace: slo-registry
    baseUri: https://slo-registry.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.slo_registry_token
    resources:
    - name: slos
      path: /slos
      operations:
      - name: get-slo
        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 → siri-intent-performance-monitoring.yml

Updates Apple developer documentation by detecting API changes in the SDK, generating updated docs with AI, publishing to the developer portal, and notifying DevRel.

naftiko: '0.5'
info:
  label: Apple Developer Documentation Update Pipeline
  description: Updates Apple developer documentation by detecting API changes in the SDK, generating updated docs with AI, publishing to the developer portal, and notifying DevRel.
  tags:
  - developer-tools
  - documentation
  - ai
  - devrel
capability:
  exposes:
  - type: mcp
    namespace: docs-pipeline
    port: 8080
    tools:
    - name: update-api-docs
      description: 'Update developer docs: detect API changes, generate updated documentation, publish to portal, and notify DevRel.'
      inputParameters:
      - name: framework_name
        in: body
        type: string
        description: The framework name, e.g. SwiftUI, UIKit, CoreML.
      - name: sdk_version
        in: body
        type: string
        description: The SDK version with changes.
      steps:
      - name: detect-changes
        type: call
        call: sdk-diff.compare-versions
        with:
          framework: '{{framework_name}}'
          version: '{{sdk_version}}'
      - name: generate-docs
        type: call
        call: openai.analyze-text
        with:
          text: 'API changes for {{framework_name}} in SDK {{sdk_version}}: {{detect-changes.diff_summary}}'
          instruction: Generate developer documentation for these API changes. Include code examples, migration notes, and deprecation warnings. Format as structured documentation.
      - name: publish-to-portal
        type: call
        call: developer-portal.update-docs
        with:
          framework: '{{framework_name}}'
          version: '{{sdk_version}}'
          content: '{{generate-docs.documentation}}'
      - name: notify-devrel
        type: call
        call: slack.post-message
        with:
          channel: '#developer-relations'
          text: 'Docs updated for {{framework_name}} SDK {{sdk_version}}. {{detect-changes.new_apis}} new APIs, {{detect-changes.deprecated_apis}} deprecations. Portal: {{publish-to-portal.url}}'
  consumes:
  - type: http
    namespace: sdk-diff
    baseUri: https://sdk-tools.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sdk_tools_token
    resources:
    - name: diffs
      path: /frameworks/{{framework}}/diff
      inputParameters:
      - name: framework
        in: path
      operations:
      - name: compare-versions
        method: POST
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        method: POST
  - type: http
    namespace: developer-portal
    baseUri: https://developer-portal.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.developer_portal_token
    resources:
    - name: docs
      path: /documentation
      operations:
      - name: update-docs
        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 → apple-developer-documentation-update-pipeline.yml

Resolves iCloud data sync conflicts by fetching conflicting records, applying merge strategy, updating the canonical record, and notifying the user.

naftiko: '0.5'
info:
  label: iCloud Sync Conflict Resolution
  description: Resolves iCloud data sync conflicts by fetching conflicting records, applying merge strategy, updating the canonical record, and notifying the user.
  tags:
  - icloud
  - data-sync
  - conflict-resolution
  - operations
capability:
  exposes:
  - type: mcp
    namespace: sync-conflict
    port: 8080
    tools:
    - name: resolve-sync-conflict
      description: 'Resolve an iCloud sync conflict: fetch conflicting records, apply merge strategy, update canonical record, and notify the user.'
      inputParameters:
      - name: conflict_id
        in: body
        type: string
        description: The sync conflict identifier.
      - name: apple_id
        in: body
        type: string
        description: The Apple ID of the affected user.
      steps:
      - name: get-conflict-details
        type: call
        call: cloudkit.get-conflict
        with:
          conflict_id: '{{conflict_id}}'
      - name: apply-merge
        type: call
        call: cloudkit.merge-records
        with:
          conflict_id: '{{conflict_id}}'
          strategy: latest-wins
          records: '{{get-conflict-details.conflicting_records}}'
      - name: update-canonical
        type: call
        call: cloudkit.update-record
        with:
          record_id: '{{get-conflict-details.record_id}}'
          data: '{{apply-merge.merged_data}}'
      - name: notify-user
        type: call
        call: apns.send-notification
        with:
          apple_id: '{{apple_id}}'
          title: Sync Conflict Resolved
          body: A data conflict in your iCloud account has been automatically resolved.
  consumes:
  - type: http
    namespace: cloudkit
    baseUri: https://api.apple-cloudkit.com/database/1
    authentication:
      type: bearer
      token: $secrets.cloudkit_admin_token
    resources:
    - name: conflicts
      path: /conflicts/{{conflict_id}}
      inputParameters:
      - name: conflict_id
        in: path
      operations:
      - name: get-conflict
        method: GET
    - name: merge
      path: /conflicts/{{conflict_id}}/merge
      inputParameters:
      - name: conflict_id
        in: path
      operations:
      - name: merge-records
        method: POST
    - name: records
      path: /records/{{record_id}}
      inputParameters:
      - name: record_id
        in: path
      operations:
      - name: update-record
        method: PUT
  - type: http
    namespace: apns
    baseUri: https://api.push.apple.com/v3
    authentication:
      type: bearer
      token: $secrets.apns_auth_token
    resources:
    - name: notifications
      path: /notifications
      operations:
      - name: send-notification
        method: POST
Open in Framework → View in Fleet → icloud-sync-conflict-resolution.yml

Manages campus visitor registration by pre-screening, generating a temporary badge, notifying the host, and logging the visit for security.

naftiko: '0.5'
info:
  label: Apple Campus Visitor Management
  description: Manages campus visitor registration by pre-screening, generating a temporary badge, notifying the host, and logging the visit for security.
  tags:
  - facilities
  - security
  - visitor-management
  - operations
capability:
  exposes:
  - type: mcp
    namespace: visitor-management
    port: 8080
    tools:
    - name: register-visitor
      description: 'Register a campus visitor: pre-screen, generate temp badge, notify host, and log for security.'
      inputParameters:
      - name: visitor_name
        in: body
        type: string
        description: The visitor full name.
      - name: visitor_email
        in: body
        type: string
        description: The visitor email.
      - name: host_email
        in: body
        type: string
        description: The Apple employee host email.
      - name: visit_date
        in: body
        type: string
        description: The visit date in ISO 8601 format.
      steps:
      - name: pre-screen
        type: call
        call: security-api.pre-screen-visitor
        with:
          visitor_name: '{{visitor_name}}'
          visitor_email: '{{visitor_email}}'
      - name: generate-badge
        type: call
        call: badge-system.create-temp-badge
        with:
          visitor_name: '{{visitor_name}}'
          visit_date: '{{visit_date}}'
          clearance: '{{pre-screen.clearance_level}}'
      - name: notify-host
        type: call
        call: slack.post-message
        with:
          channel: '{{host_email}}'
          text: 'Your visitor {{visitor_name}} is registered for {{visit_date}}. Badge: {{generate-badge.badge_id}}. Please meet at reception.'
      - name: log-visit
        type: call
        call: splunk.log-event
        with:
          index: campus-security
          event: visitor_registration
          visitor: '{{visitor_name}}'
          host: '{{host_email}}'
          badge_id: '{{generate-badge.badge_id}}'
  consumes:
  - type: http
    namespace: security-api
    baseUri: https://campus-security.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.campus_security_token
    resources:
    - name: screening
      path: /visitors/pre-screen
      operations:
      - name: pre-screen-visitor
        method: POST
  - type: http
    namespace: badge-system
    baseUri: https://badge-system.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.badge_system_token
    resources:
    - name: badges
      path: /badges/temporary
      operations:
      - name: create-temp-badge
        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: splunk
    baseUri: https://splunk.apple.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /collector/event
      operations:
      - name: log-event
        method: POST
Open in Framework → View in Fleet → apple-campus-visitor-management.yml

Manages Genius Bar appointment scheduling by checking store availability, booking the slot, creating a service ticket, and sending a confirmation to the customer.

naftiko: '0.5'
info:
  label: Retail Genius Bar Appointment Orchestrator
  description: Manages Genius Bar appointment scheduling by checking store availability, booking the slot, creating a service ticket, and sending a confirmation to the customer.
  tags:
  - retail
  - customer-service
  - scheduling
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: genius-bar
    port: 8080
    tools:
    - name: book-genius-appointment
      description: 'Book a Genius Bar appointment: check store availability, reserve slot, create service ticket, and confirm with customer.'
      inputParameters:
      - name: store_number
        in: body
        type: string
        description: The Apple Retail Store number.
      - name: customer_email
        in: body
        type: string
        description: The customer email address.
      - name: device_serial
        in: body
        type: string
        description: The device serial number needing service.
      - name: issue_description
        in: body
        type: string
        description: Brief description of the issue.
      steps:
      - name: check-availability
        type: call
        call: retail-api.get-availability
        with:
          store_number: '{{store_number}}'
      - name: book-slot
        type: call
        call: retail-api.book-appointment
        with:
          store_number: '{{store_number}}'
          slot_id: '{{check-availability.next_available_slot_id}}'
          customer_email: '{{customer_email}}'
      - name: create-service-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Genius Bar: {{issue_description}}'
          description: 'Device: {{device_serial}}. Store: {{store_number}}. Appointment: {{book-slot.appointment_id}}'
          category: hardware_support
      - name: send-confirmation
        type: call
        call: ses.send-email
        with:
          to: '{{customer_email}}'
          subject: Your Genius Bar Appointment Confirmation
          body: 'Appointment confirmed at store {{store_number}} on {{book-slot.appointment_time}}. Ref: {{book-slot.appointment_id}}.'
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://retail-internal.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.retail_api_token
    resources:
    - name: availability
      path: /stores/{{store_number}}/genius-bar/availability
      inputParameters:
      - name: store_number
        in: path
      operations:
      - name: get-availability
        method: GET
    - name: appointments
      path: /stores/{{store_number}}/genius-bar/appointments
      inputParameters:
      - name: store_number
        in: path
      operations:
      - name: book-appointment
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://apple.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: ses
    baseUri: https://email.us-west-2.amazonaws.com/v2
    authentication:
      type: bearer
      token: $secrets.aws_ses_token
    resources:
    - name: emails
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → retail-genius-bar-appointment-orchestrator.yml

Checks device compliance via Jamf Pro, restricts non-compliant devices in Okta, creates a ServiceNow remediation ticket, and notifies IT security.

naftiko: '0.5'
info:
  label: MDM Device Compliance Enforcement
  description: Checks device compliance via Jamf Pro, restricts non-compliant devices in Okta, creates a ServiceNow remediation ticket, and notifies IT security.
  tags:
  - device-management
  - security
  - jamf
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: mdm-compliance
    port: 8080
    tools:
    - name: enforce-device-compliance
      description: Check device compliance in Jamf, restrict access in Okta if non-compliant, open a remediation ticket, and alert IT security.
      inputParameters:
      - name: device_serial
        in: body
        type: string
        description: The device serial number to check.
      - name: employee_email
        in: body
        type: string
        description: The device owner email.
      steps:
      - name: check-compliance
        type: call
        call: jamf.get-device-compliance
        with:
          serial_number: '{{device_serial}}'
      - name: restrict-access
        type: call
        call: okta.suspend-user-apps
        with:
          email: '{{employee_email}}'
          reason: 'Device {{device_serial}} non-compliant: {{check-compliance.violations}}'
      - name: create-remediation-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Non-compliant device: {{device_serial}}'
          description: 'Owner: {{employee_email}}. Violations: {{check-compliance.violations}}. Okta access restricted.'
          category: security_compliance
          urgency: '2'
      - name: alert-security
        type: call
        call: slack.post-message
        with:
          channel: '#it-security'
          text: 'Non-compliant device {{device_serial}} ({{employee_email}}). Okta access restricted. Ticket: {{create-remediation-ticket.number}}'
  consumes:
  - type: http
    namespace: jamf
    baseUri: https://apple.jamfcloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.jamf_api_token
    resources:
    - name: devices
      path: /computers-inventory?filter=hardware.serialNumber=={{serial_number}}
      inputParameters:
      - name: serial_number
        in: query
      operations:
      - name: get-device-compliance
        method: GET
  - type: http
    namespace: okta
    baseUri: https://apple.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{email}}/lifecycle/suspend
      inputParameters:
      - name: email
        in: path
      operations:
      - name: suspend-user-apps
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://apple.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mdm-device-compliance-enforcement.yml

Looks up an Apple SAP S/4HANA purchase order by number and returns header status, vendor details, and total value.

naftiko: '0.5'
info:
  label: SAP Purchase Order Lookup
  description: Looks up an Apple SAP S/4HANA purchase order by number and returns header status, vendor details, and total value.
  tags:
  - finance
  - procurement
  - sap
  - erp
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 status, vendor name, total value, and currency. Use for procurement status checks and AP invoice matching.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number, e.g. 4500098765.
      call: sap-erp.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-erp
    baseUri: https://apple-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-lookup.yml

Retrieves details of an Apple Retail Store by store number, including address, phone, hours, and Genius Bar availability.

naftiko: '0.5'
info:
  label: Apple Retail Store Info Lookup
  description: Retrieves details of an Apple Retail Store by store number, including address, phone, hours, and Genius Bar availability.
  tags:
  - retail
  - operations
  - store-management
capability:
  exposes:
  - type: mcp
    namespace: apple-retail
    port: 8080
    tools:
    - name: get-store-info
      description: Look up an Apple Retail Store by store number. Returns address, phone, operating hours, and Genius Bar status.
      inputParameters:
      - name: store_number
        in: body
        type: string
        description: The Apple Retail Store number, e.g. R001.
      call: retail-api.get-store
      with:
        store_number: '{{store_number}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.store.name
      - name: address
        type: string
        mapping: $.store.address.formattedAddress
      - name: genius_bar_available
        type: boolean
        mapping: $.store.geniusBarAvailable
  consumes:
  - type: http
    namespace: retail-api
    baseUri: https://retail-internal.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.retail_api_token
    resources:
    - name: stores
      path: /stores/{{store_number}}
      inputParameters:
      - name: store_number
        in: path
      operations:
      - name: get-store
        method: GET
Open in Framework → View in Fleet → apple-retail-store-info-lookup.yml

Retrieves metadata for an app listed on the App Store by its bundle ID, including name, version, rating, and category.

naftiko: '0.5'
info:
  label: App Store App Metadata Lookup
  description: Retrieves metadata for an app listed on the App Store by its bundle ID, including name, version, rating, and category.
  tags:
  - app-store
  - developer-tools
  - metadata
capability:
  exposes:
  - type: mcp
    namespace: appstore-metadata
    port: 8080
    tools:
    - name: get-app-metadata
      description: Look up App Store app metadata by bundle ID. Returns app name, current version, average rating, and primary category.
      inputParameters:
      - name: bundle_id
        in: body
        type: string
        description: The iOS app bundle identifier, e.g. com.apple.Keynote.
      call: appstoreconnect.get-app
      with:
        bundle_id: '{{bundle_id}}'
      outputParameters:
      - name: app_name
        type: string
        mapping: $.data.attributes.name
      - name: version
        type: string
        mapping: $.data.attributes.version
      - name: rating
        type: number
        mapping: $.data.attributes.averageUserRating
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: apps
      path: /apps?filter[bundleId]={{bundle_id}}
      inputParameters:
      - name: bundle_id
        in: query
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → app-store-app-metadata-lookup.yml

Rotates API keys for App Store Connect integrations by generating a new key, updating secrets in Vault, deploying via Terraform, and notifying DevOps.

naftiko: '0.5'
info:
  label: Apple Developer API Key Rotation
  description: Rotates API keys for App Store Connect integrations by generating a new key, updating secrets in Vault, deploying via Terraform, and notifying DevOps.
  tags:
  - developer-tools
  - security
  - secrets-management
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: api-key-rotation
    port: 8080
    tools:
    - name: rotate-api-key
      description: 'Rotate an App Store Connect API key: generate new key, store in Vault, deploy config update, and notify DevOps.'
      inputParameters:
      - name: key_id
        in: body
        type: string
        description: The existing API key identifier to rotate.
      - name: issuer_id
        in: body
        type: string
        description: The App Store Connect issuer ID.
      steps:
      - name: generate-new-key
        type: call
        call: appstoreconnect.create-api-key
        with:
          issuer_id: '{{issuer_id}}'
          roles: ADMIN
      - name: store-in-vault
        type: call
        call: vault.write-secret
        with:
          path: secret/appstoreconnect/{{issuer_id}}
          key: api_key
          value: '{{generate-new-key.private_key}}'
      - name: deploy-config
        type: call
        call: terraform.trigger-run
        with:
          workspace: api-key-configs
          message: Rotated API key {{key_id}} for issuer {{issuer_id}}
      - name: revoke-old-key
        type: call
        call: appstoreconnect.revoke-api-key
        with:
          key_id: '{{key_id}}'
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: api-keys
      path: /apiKeys
      operations:
      - name: create-api-key
        method: POST
    - name: api-key-revoke
      path: /apiKeys/{{key_id}}
      inputParameters:
      - name: key_id
        in: path
      operations:
      - name: revoke-api-key
        method: DELETE
  - type: http
    namespace: vault
    baseUri: https://vault.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: secrets
      path: /{{path}}
      inputParameters:
      - name: path
        in: path
      operations:
      - name: write-secret
        method: POST
  - 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: trigger-run
        method: POST
Open in Framework → View in Fleet → apple-developer-api-key-rotation.yml

Retrieves technical specifications for an Apple Silicon chip by model identifier, including core counts, transistor count, and process node.

naftiko: '0.5'
info:
  label: Apple Silicon Chip Spec Lookup
  description: Retrieves technical specifications for an Apple Silicon chip by model identifier, including core counts, transistor count, and process node.
  tags:
  - hardware
  - silicon-design
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: silicon-specs
    port: 8080
    tools:
    - name: get-chip-spec
      description: Look up Apple Silicon chip specifications by model ID. Returns CPU/GPU core counts, transistor count, and fabrication process node.
      inputParameters:
      - name: chip_model
        in: body
        type: string
        description: The chip model identifier, e.g. M3-Pro.
      call: engineering-db.get-chip
      with:
        chip_model: '{{chip_model}}'
      outputParameters:
      - name: cpu_cores
        type: number
        mapping: $.chip.cpuCoreCount
      - name: gpu_cores
        type: number
        mapping: $.chip.gpuCoreCount
      - name: process_node_nm
        type: number
        mapping: $.chip.processNodeNm
  consumes:
  - type: http
    namespace: engineering-db
    baseUri: https://engineering-data.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.engineering_db_token
    resources:
    - name: chips
      path: /silicon/chips/{{chip_model}}
      inputParameters:
      - name: chip_model
        in: path
      operations:
      - name: get-chip
        method: GET
Open in Framework → View in Fleet → apple-silicon-chip-spec-lookup.yml

Checks the status of a health records export job from the Apple Health data pipeline, returning progress and record count.

naftiko: '0.5'
info:
  label: Apple Health Records Export Status
  description: Checks the status of a health records export job from the Apple Health data pipeline, returning progress and record count.
  tags:
  - health
  - data-export
  - privacy
capability:
  exposes:
  - type: mcp
    namespace: health-records
    port: 8080
    tools:
    - name: get-export-status
      description: Check the status of an Apple Health records export job. Returns completion percentage, record count, and error summary.
      inputParameters:
      - name: export_job_id
        in: body
        type: string
        description: The health records export job identifier.
      call: health-data.get-export-job
      with:
        export_job_id: '{{export_job_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.job.status
      - name: progress_percent
        type: number
        mapping: $.job.progressPercent
      - name: record_count
        type: number
        mapping: $.job.totalRecords
  consumes:
  - type: http
    namespace: health-data
    baseUri: https://health-data-internal.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.health_data_token
    resources:
    - name: export-jobs
      path: /exports/{{export_job_id}}
      inputParameters:
      - name: export_job_id
        in: path
      operations:
      - name: get-export-job
        method: GET
Open in Framework → View in Fleet → apple-health-records-export-status.yml

Reviews AR content submissions by validating USDZ assets, running performance benchmarks, checking content guidelines, and routing for editorial approval.

naftiko: '0.5'
info:
  label: Apple AR Content Review Pipeline
  description: Reviews AR content submissions by validating USDZ assets, running performance benchmarks, checking content guidelines, and routing for editorial approval.
  tags:
  - ar-vr
  - content-review
  - quality-assurance
  - developer-tools
capability:
  exposes:
  - type: mcp
    namespace: ar-review
    port: 8080
    tools:
    - name: review-ar-content
      description: 'Review AR content: validate USDZ, run performance benchmark, check guidelines, and route for approval.'
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: The AR content submission identifier.
      steps:
      - name: validate-usdz
        type: call
        call: ar-tools.validate-asset
        with:
          submission_id: '{{submission_id}}'
      - name: run-benchmark
        type: call
        call: ar-tools.benchmark-performance
        with:
          asset_url: '{{validate-usdz.asset_url}}'
          target_device: iPhone
      - name: check-guidelines
        type: call
        call: content-review.check-ar-guidelines
        with:
          submission_id: '{{submission_id}}'
          asset_metadata: '{{validate-usdz.metadata}}'
      - name: route-for-approval
        type: call
        call: jira.create-issue
        with:
          project: AR
          summary: 'AR content review: {{submission_id}}'
          description: 'USDZ valid: {{validate-usdz.is_valid}}. Benchmark FPS: {{run-benchmark.avg_fps}}. Guidelines: {{check-guidelines.status}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: ar-tools
    baseUri: https://ar-tools.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ar_tools_token
    resources:
    - name: validation
      path: /submissions/{{submission_id}}/validate
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: validate-asset
        method: POST
    - name: benchmarks
      path: /benchmarks
      operations:
      - name: benchmark-performance
        method: POST
  - type: http
    namespace: content-review
    baseUri: https://content-review.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.content_review_token
    resources:
    - name: guidelines
      path: /ar/guidelines-check
      operations:
      - name: check-ar-guidelines
        method: POST
  - type: http
    namespace: jira
    baseUri: https://apple-eng.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → apple-ar-content-review-pipeline.yml

Detects potentially fraudulent Apple Pay transactions by scoring with an ML model, blocking suspicious merchants, logging to Splunk, and alerting the fraud team.

naftiko: '0.5'
info:
  label: Apple Pay Fraud Detection Workflow
  description: Detects potentially fraudulent Apple Pay transactions by scoring with an ML model, blocking suspicious merchants, logging to Splunk, and alerting the fraud team.
  tags:
  - payments
  - fraud-detection
  - security
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: fraud-detection
    port: 8080
    tools:
    - name: evaluate-transaction-fraud
      description: Given a transaction ID, score for fraud risk, block if suspicious, log the event, and alert the fraud operations team.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The Apple Pay transaction ID to evaluate.
      steps:
      - name: get-transaction
        type: call
        call: applepay.get-transaction
        with:
          transaction_id: '{{transaction_id}}'
      - name: score-fraud-risk
        type: call
        call: fraud-ml.score-transaction
        with:
          amount: '{{get-transaction.amount}}'
          merchant_id: '{{get-transaction.merchant_id}}'
          country: '{{get-transaction.country}}'
          device_id: '{{get-transaction.device_id}}'
      - name: log-to-splunk
        type: call
        call: splunk.log-event
        with:
          index: fraud-events
          event: fraud_score
          transaction_id: '{{transaction_id}}'
          score: '{{score-fraud-risk.risk_score}}'
      - name: alert-fraud-team
        type: call
        call: slack.post-message
        with:
          channel: '#fraud-ops'
          text: 'Fraud evaluation for txn {{transaction_id}}: Risk score={{score-fraud-risk.risk_score}}, Decision={{score-fraud-risk.decision}}. Merchant: {{get-transaction.merchant_name}}.'
  consumes:
  - type: http
    namespace: applepay
    baseUri: https://apple-pay-gateway.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.apple_pay_api_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
  - type: http
    namespace: fraud-ml
    baseUri: https://fraud-ml.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.fraud_ml_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: score-transaction
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.apple.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /collector/event
      operations:
      - name: log-event
        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 → apple-pay-fraud-detection-workflow.yml

Onboards a new merchant to Apple Pay by validating their certificate, provisioning a payment session, registering in the merchant portal, and sending confirmation.

naftiko: '0.5'
info:
  label: Apple Pay Merchant Onboarding
  description: Onboards a new merchant to Apple Pay by validating their certificate, provisioning a payment session, registering in the merchant portal, and sending confirmation.
  tags:
  - payments
  - apple-pay
  - merchant
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: merchant-onboarding
    port: 8080
    tools:
    - name: onboard-merchant
      description: 'Onboard a new Apple Pay merchant: validate certificate, provision payment session, register merchant, and confirm via email.'
      inputParameters:
      - name: merchant_id
        in: body
        type: string
        description: The merchant identifier to onboard.
      - name: domain
        in: body
        type: string
        description: The merchant web domain for domain verification.
      - name: contact_email
        in: body
        type: string
        description: The merchant contact email address.
      steps:
      - name: validate-certificate
        type: call
        call: applepay.validate-merchant-cert
        with:
          merchant_id: '{{merchant_id}}'
          domain: '{{domain}}'
      - name: provision-session
        type: call
        call: applepay.create-payment-session
        with:
          merchant_id: '{{merchant_id}}'
          validation_url: '{{validate-certificate.validation_url}}'
      - name: register-merchant
        type: call
        call: merchant-portal.register
        with:
          merchant_id: '{{merchant_id}}'
          session_token: '{{provision-session.session_token}}'
          domain: '{{domain}}'
      - name: send-confirmation
        type: call
        call: ses.send-email
        with:
          to: '{{contact_email}}'
          subject: Apple Pay Merchant Onboarding Complete
          body: 'Merchant {{merchant_id}} has been successfully onboarded. Portal ID: {{register-merchant.portal_id}}.'
  consumes:
  - type: http
    namespace: applepay
    baseUri: https://apple-pay-gateway.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.apple_pay_api_token
    resources:
    - name: validation
      path: /merchants/{{merchant_id}}/validate
      inputParameters:
      - name: merchant_id
        in: path
      operations:
      - name: validate-merchant-cert
        method: POST
    - name: sessions
      path: /payment-sessions
      operations:
      - name: create-payment-session
        method: POST
  - type: http
    namespace: merchant-portal
    baseUri: https://merchant-portal.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.merchant_portal_token
    resources:
    - name: registration
      path: /merchants
      operations:
      - name: register
        method: POST
  - type: http
    namespace: ses
    baseUri: https://email.us-west-2.amazonaws.com/v2
    authentication:
      type: bearer
      token: $secrets.aws_ses_token
    resources:
    - name: emails
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → apple-pay-merchant-onboarding.yml

Plans datacenter capacity by querying current utilization from Datadog, forecasting growth with Snowflake, and generating provisioning recommendations for infrastructure teams.

naftiko: '0.5'
info:
  label: Apple Datacenter Capacity Planning
  description: Plans datacenter capacity by querying current utilization from Datadog, forecasting growth with Snowflake, and generating provisioning recommendations for infrastructure teams.
  tags:
  - infrastructure
  - capacity-planning
  - datadog
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: capacity-planning
    port: 8080
    tools:
    - name: plan-datacenter-capacity
      description: 'Plan datacenter capacity: query utilization, forecast growth, generate recommendations, and notify infrastructure team.'
      inputParameters:
      - name: datacenter_id
        in: body
        type: string
        description: The datacenter identifier.
      - name: forecast_months
        in: body
        type: number
        description: Number of months to forecast, e.g. 3, 6, 12.
      steps:
      - name: get-current-utilization
        type: call
        call: datadog.query-metrics
        with:
          query: avg:datacenter.cpu.utilization{dc:{{datacenter_id}}},avg:datacenter.storage.utilization{dc:{{datacenter_id}}}
          time_range: last_30d
      - name: forecast-growth
        type: call
        call: snowflake.execute-query
        with:
          query: CALL infrastructure.forecast_capacity('{{datacenter_id}}', {{forecast_months}})
          warehouse: INFRA_WH
      - name: generate-recommendations
        type: call
        call: openai.analyze-text
        with:
          text: 'Current CPU: {{get-current-utilization.cpu_avg}}%, Storage: {{get-current-utilization.storage_avg}}%. Forecast: CPU={{forecast-growth.projected_cpu}}%, Storage={{forecast-growth.projected_storage}}% in {{forecast_months}} months.'
          instruction: Generate datacenter capacity recommendations. Include server count, storage expansion, and timeline. Return JSON.
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: '#infrastructure-planning'
          text: 'Capacity plan for {{datacenter_id}} ({{forecast_months}}mo forecast): Current CPU={{get-current-utilization.cpu_avg}}%, Projected={{forecast-growth.projected_cpu}}%. Recommendation: {{generate-recommendations.summary}}'
  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: metrics
      path: /query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://apple.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        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 → apple-datacenter-capacity-planning.yml

Queries Salesforce for recent customer support cases flagged as App Store reviews, submits a batch to OpenAI for sentiment classification, and posts a digest to the product Slack channel.

naftiko: '0.5'
info:
  label: App Store Review Sentiment Triage
  description: Queries Salesforce for recent customer support cases flagged as App Store reviews, submits a batch to OpenAI for sentiment classification, and posts a digest to the product Slack channel.
  tags:
  - customer-support
  - salesforce
  - openai
  - ai
  - slack
capability:
  exposes:
  - type: mcp
    namespace: review-triage
    port: 8080
    tools:
    - name: triage-app-store-reviews
      description: Given a Salesforce queue name for App Store reviews, fetch recent cases, classify sentiment with OpenAI, and post a summary digest to the product Slack channel.
      inputParameters:
      - name: queue_name
        in: body
        type: string
        description: The Salesforce queue name containing App Store review cases.
      - name: product_channel
        in: body
        type: string
        description: The Slack channel to post the sentiment digest to.
      steps:
      - name: fetch-reviews
        type: call
        call: salesforce-reviews.query-cases
        with:
          queue: '{{queue_name}}'
          status: New
      - name: classify-sentiment
        type: call
        call: openai-reviews.create-completion
        with:
          model: gpt-4o
          prompt: 'Classify the following App Store reviews by sentiment (positive, neutral, negative) and identify top themes: {{fetch-reviews.cases}}'
      - name: post-digest
        type: call
        call: slack-reviews.post-message
        with:
          channel: '{{product_channel}}'
          text: 'App Store Review Digest — {{queue_name}}: {{classify-sentiment.text}}'
  consumes:
  - type: http
    namespace: salesforce-reviews
    baseUri: https://apple.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /query
      operations:
      - name: query-cases
        method: GET
        inputParameters:
        - name: queue
          in: query
        - name: status
          in: query
  - type: http
    namespace: openai-reviews
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
  - type: http
    namespace: slack-reviews
    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 → app-store-review-sentiment-triage.yml

Checks the delivery status of an Apple Push Notification by its notification UUID, returning delivery state and timestamp.

naftiko: '0.5'
info:
  label: Apple Push Notification Delivery Status
  description: Checks the delivery status of an Apple Push Notification by its notification UUID, returning delivery state and timestamp.
  tags:
  - notifications
  - apns
  - mobile
capability:
  exposes:
  - type: mcp
    namespace: apns-status
    port: 8080
    tools:
    - name: get-notification-status
      description: Check the delivery status of an APNs push notification by UUID. Returns delivery state, device token prefix, and timestamp.
      inputParameters:
      - name: notification_id
        in: body
        type: string
        description: The APNs notification UUID.
      call: apns.get-delivery-status
      with:
        notification_id: '{{notification_id}}'
      outputParameters:
      - name: delivery_state
        type: string
        mapping: $.deliveryStatus
      - name: timestamp
        type: string
        mapping: $.deliveredAt
  consumes:
  - type: http
    namespace: apns
    baseUri: https://api.push.apple.com/v3
    authentication:
      type: bearer
      token: $secrets.apns_auth_token
    resources:
    - name: notifications
      path: /notifications/{{notification_id}}/status
      inputParameters:
      - name: notification_id
        in: path
      operations:
      - name: get-delivery-status
        method: GET
Open in Framework → View in Fleet → apple-push-notification-delivery-status.yml

When a Snowflake data quality check fails, creates a Jira data quality issue and notifies the data engineering team via Slack.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Alert
  description: When a Snowflake data quality check fails, creates a Jira data quality issue and notifies the data engineering team via Slack.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - data-quality
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: handle-data-quality-failure
      description: Given a Snowflake table and failed data quality check name, open a Jira data quality issue and notify the data engineering Slack channel.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: The fully qualified Snowflake table name that failed the quality check.
      - name: check_name
        in: body
        type: string
        description: The data quality check name that failed.
      - name: failure_detail
        in: body
        type: string
        description: Description of what failed and relevant metrics.
      steps:
      - name: create-dq-issue
        type: call
        call: jira-dq.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: '[DQ Failure] {{table_name}} — {{check_name}}'
          description: 'Data quality check {{check_name}} failed on {{table_name}}. Detail: {{failure_detail}}.'
      - name: notify-data-team
        type: call
        call: slack-dq.post-message
        with:
          channel: '#data-engineering-alerts'
          text: 'Data Quality Failure: {{table_name}} | Check: {{check_name}} | Jira: {{create-dq-issue.key}}'
  consumes:
  - type: http
    namespace: jira-dq
    baseUri: https://apple.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-dq
    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 → snowflake-data-quality-alert.yml

When a termination is recorded in Workday, deactivates the Okta account, closes open ServiceNow tickets, and posts a summary to the HR Slack channel.

naftiko: '0.5'
info:
  label: Employee Offboarding Workflow
  description: When a termination is recorded in Workday, deactivates the Okta account, closes open ServiceNow tickets, and posts a summary to the HR Slack channel.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-employee-offboarding
      description: Given a Workday employee ID and termination date, deactivate the Okta account, close open ServiceNow tickets, and notify the HR Slack channel.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for 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-off.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: deactivate-okta
        type: call
        call: okta-off.deactivate-user
        with:
          user_id: '{{get-worker.okta_user_id}}'
      - name: notify-hr
        type: call
        call: slack-off.post-message
        with:
          channel: '#hr-ops'
          text: 'Offboarding complete for {{get-worker.full_name}} (effective: {{termination_date}}). Okta account deactivated.'
  consumes:
  - type: http
    namespace: workday-off
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /apple/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-off
    baseUri: https://apple.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_id}}/lifecycle/deactivate
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: slack-off
    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 → employee-offboarding-workflow.yml

Searches the Apple TV+ content catalog by keyword, returning matching titles with genre, rating, and release year.

naftiko: '0.5'
info:
  label: Apple TV+ Content Catalog Search
  description: Searches the Apple TV+ content catalog by keyword, returning matching titles with genre, rating, and release year.
  tags:
  - media
  - apple-tv
  - content
capability:
  exposes:
  - type: mcp
    namespace: apple-tv-plus
    port: 8080
    tools:
    - name: search-catalog
      description: Search Apple TV+ content catalog by keyword. Returns matching show/movie titles, genres, and ratings.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search keyword or phrase.
      call: tvservices.search-content
      with:
        query: '{{query}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.data.results
      - name: result_count
        type: number
        mapping: $.data.totalCount
  consumes:
  - type: http
    namespace: tvservices
    baseUri: https://tv.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.tv_services_token
    resources:
    - name: search
      path: /search?term={{query}}&type=shows,movies
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-content
        method: GET
Open in Framework → View in Fleet → apple-tv-content-catalog-search.yml

Submits an engineering specification document stored in Confluence to OpenAI for summarization and posts the structured summary to the relevant Slack channel.

naftiko: '0.5'
info:
  label: AI Document Summarization for Engineering Specs
  description: Submits an engineering specification document stored in Confluence to OpenAI for summarization and posts the structured summary to the relevant Slack channel.
  tags:
  - ai
  - engineering
  - confluence
  - openai
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ai-engineering
    port: 8080
    tools:
    - name: summarize-engineering-spec
      description: Given a Confluence page ID and Slack channel, retrieve the engineering spec, submit to OpenAI for a structured summary, and post the summary to Slack.
      inputParameters:
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID of the engineering specification.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to post the summary to.
      steps:
      - name: get-confluence-page
        type: call
        call: confluence.get-page
        with:
          page_id: '{{confluence_page_id}}'
      - name: generate-summary
        type: call
        call: openai.create-completion
        with:
          model: gpt-4o
          prompt: 'Summarize this engineering specification with sections: Overview, Key Requirements, Architecture Decisions, Open Questions: {{get-confluence-page.body}}'
      - name: post-summary
        type: call
        call: slack-ai.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Engineering Spec Summary ({{confluence_page_id}}): {{generate-summary.text}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://apple.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
  - type: http
    namespace: slack-ai
    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 → ai-document-summarization-for-engineering-specs.yml

When a complex ServiceNow incident is created, submits the description to OpenAI for AI-assisted triage and recommended resolution steps, then updates the ticket with the analysis.

naftiko: '0.5'
info:
  label: Intelligent Incident Triage with OpenAI
  description: When a complex ServiceNow incident is created, submits the description to OpenAI for AI-assisted triage and recommended resolution steps, then updates the ticket with the analysis.
  tags:
  - ai
  - itsm
  - servicenow
  - openai
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: ai-triage
    port: 8080
    tools:
    - name: triage-incident-with-ai
      description: Given a ServiceNow incident number, retrieve the incident, submit to OpenAI for root cause and resolution recommendations, and update the ServiceNow record with AI analysis.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. INC0012345.
      steps:
      - name: get-incident
        type: call
        call: servicenow-ai.get-incident
        with:
          number: '{{incident_number}}'
      - name: analyze-incident
        type: call
        call: openai-triage.create-completion
        with:
          model: gpt-4o
          prompt: 'Analyze this IT incident and provide: 1) Probable root cause, 2) Recommended resolution steps, 3) Priority suggestion. Incident: {{get-incident.short_description}} — {{get-incident.description}}'
      - name: update-incident
        type: call
        call: servicenow-ai.update-incident
        with:
          number: '{{incident_number}}'
          work_notes: 'AI Triage Analysis: {{analyze-incident.text}}'
  consumes:
  - type: http
    namespace: servicenow-ai
    baseUri: https://apple.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
        inputParameters:
        - name: number
          in: query
      - name: update-incident
        method: PATCH
  - type: http
    namespace: openai-triage
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: create-completion
        method: POST
Open in Framework → View in Fleet → intelligent-incident-triage-with-openai.yml

Orchestrates iCloud data recovery by verifying user identity, initiating a recovery snapshot, creating a support ticket, and notifying the user via email.

naftiko: '0.5'
info:
  label: iCloud Data Recovery Orchestrator
  description: Orchestrates iCloud data recovery by verifying user identity, initiating a recovery snapshot, creating a support ticket, and notifying the user via email.
  tags:
  - icloud
  - data-recovery
  - support
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: icloud-recovery
    port: 8080
    tools:
    - name: initiate-data-recovery
      description: Given an Apple ID and recovery reason, verify identity, initiate a snapshot recovery, create a support case, and email the user.
      inputParameters:
      - name: apple_id
        in: body
        type: string
        description: The Apple ID email for the recovery request.
      - name: recovery_reason
        in: body
        type: string
        description: Brief description of why data recovery is needed.
      steps:
      - name: verify-identity
        type: call
        call: identity.verify-user
        with:
          apple_id: '{{apple_id}}'
      - name: create-snapshot
        type: call
        call: icloud.create-recovery-snapshot
        with:
          apple_id: '{{apple_id}}'
          verified_token: '{{verify-identity.verification_token}}'
      - name: create-support-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'iCloud data recovery: {{apple_id}}'
          description: 'Reason: {{recovery_reason}}. Snapshot ID: {{create-snapshot.snapshot_id}}'
          category: data_recovery
      - name: email-user
        type: call
        call: ses.send-email
        with:
          to: '{{apple_id}}'
          subject: Your iCloud Data Recovery Request
          body: 'Your recovery has been initiated. Support case: {{create-support-case.number}}. Snapshot ID: {{create-snapshot.snapshot_id}}.'
  consumes:
  - type: http
    namespace: identity
    baseUri: https://idmsa.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.identity_service_token
    resources:
    - name: verification
      path: /users/{{apple_id}}/verify
      inputParameters:
      - name: apple_id
        in: path
      operations:
      - name: verify-user
        method: POST
  - type: http
    namespace: icloud
    baseUri: https://setup.icloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.icloud_admin_token
    resources:
    - name: recovery
      path: /recovery/snapshots
      operations:
      - name: create-recovery-snapshot
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://apple.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: ses
    baseUri: https://email.us-west-2.amazonaws.com/v2
    authentication:
      type: bearer
      token: $secrets.aws_ses_token
    resources:
    - name: emails
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → icloud-data-recovery-orchestrator.yml

Coordinates a product recall by identifying affected serial numbers, notifying customers, creating a logistics plan, and reporting to regulatory teams.

naftiko: '0.5'
info:
  label: Product Recall Coordination Workflow
  description: Coordinates a product recall by identifying affected serial numbers, notifying customers, creating a logistics plan, and reporting to regulatory teams.
  tags:
  - quality-assurance
  - supply-chain
  - compliance
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: product-recall
    port: 8080
    tools:
    - name: coordinate-recall
      description: 'Coordinate a product recall: identify affected units, notify customers, create logistics plan, and report to regulatory.'
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The recalled product SKU.
      - name: recall_reason
        in: body
        type: string
        description: The reason for the recall.
      - name: serial_range_start
        in: body
        type: string
        description: Start of the affected serial number range.
      - name: serial_range_end
        in: body
        type: string
        description: End of the affected serial number range.
      steps:
      - name: identify-affected
        type: call
        call: manufacturing-db.get-units-in-range
        with:
          product_sku: '{{product_sku}}'
          serial_start: '{{serial_range_start}}'
          serial_end: '{{serial_range_end}}'
      - name: notify-customers
        type: call
        call: notification-service.send-bulk-notification
        with:
          customer_list: '{{identify-affected.customer_contacts}}'
          subject: 'Important Safety Recall: {{product_sku}}'
          message: 'Your device may be affected by a recall. Reason: {{recall_reason}}. Please visit apple.com/support/recall.'
      - name: create-logistics-plan
        type: call
        call: logistics-api.create-recall-plan
        with:
          product_sku: '{{product_sku}}'
          unit_count: '{{identify-affected.affected_count}}'
      - name: report-to-regulatory
        type: call
        call: compliance-api.submit-recall-report
        with:
          product_sku: '{{product_sku}}'
          reason: '{{recall_reason}}'
          affected_units: '{{identify-affected.affected_count}}'
          logistics_plan_id: '{{create-logistics-plan.plan_id}}'
  consumes:
  - type: http
    namespace: manufacturing-db
    baseUri: https://manufacturing-data.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.manufacturing_db_token
    resources:
    - name: units
      path: /products/{{product_sku}}/units
      inputParameters:
      - name: product_sku
        in: path
      operations:
      - name: get-units-in-range
        method: POST
  - type: http
    namespace: notification-service
    baseUri: https://notifications.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.notification_service_token
    resources:
    - name: bulk
      path: /notifications/bulk
      operations:
      - name: send-bulk-notification
        method: POST
  - type: http
    namespace: logistics-api
    baseUri: https://logistics.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.logistics_token
    resources:
    - name: recall-plans
      path: /recall-plans
      operations:
      - name: create-recall-plan
        method: POST
  - type: http
    namespace: compliance-api
    baseUri: https://compliance-internal.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_api_token
    resources:
    - name: recall-reports
      path: /recall-reports
      operations:
      - name: submit-recall-report
        method: POST
Open in Framework → View in Fleet → product-recall-coordination-workflow.yml

Validates hardware product launch readiness by checking supply chain status, retail inventory staging, marketing asset completion, and generating a go/no-go report.

naftiko: '0.5'
info:
  label: Hardware Product Launch Readiness
  description: Validates hardware product launch readiness by checking supply chain status, retail inventory staging, marketing asset completion, and generating a go/no-go report.
  tags:
  - hardware
  - product-launch
  - supply-chain
  - retail
capability:
  exposes:
  - type: mcp
    namespace: launch-readiness
    port: 8080
    tools:
    - name: check-launch-readiness
      description: 'Validate hardware product launch readiness: check supply, retail staging, marketing assets, and generate go/no-go summary.'
      inputParameters:
      - name: product_sku
        in: body
        type: string
        description: The product SKU for the launch.
      - name: launch_date
        in: body
        type: string
        description: The planned launch date in ISO 8601 format.
      steps:
      - name: check-supply
        type: call
        call: supply-chain-api.get-readiness
        with:
          product_sku: '{{product_sku}}'
          target_date: '{{launch_date}}'
      - name: check-retail-staging
        type: call
        call: retail-api.get-staging-status
        with:
          product_sku: '{{product_sku}}'
      - name: check-marketing
        type: call
        call: marketing-api.get-asset-status
        with:
          product_sku: '{{product_sku}}'
      - name: post-readiness-report
        type: call
        call: slack.post-message
        with:
          channel: '#product-launches'
          text: 'Launch readiness for {{product_sku}} on {{launch_date}}: Supply={{check-supply.status}}, Retail={{check-retail-staging.status}}, Marketing={{check-marketing.status}}.'
  consumes:
  - type: http
    namespace: supply-chain-api
    baseUri: https://supply-chain.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.supply_chain_token
    resources:
    - name: readiness
      path: /products/{{product_sku}}/readiness
      inputParameters:
      - name: product_sku
        in: path
      operations:
      - name: get-readiness
        method: GET
  - type: http
    namespace: retail-api
    baseUri: https://retail-internal.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.retail_api_token
    resources:
    - name: staging
      path: /products/{{product_sku}}/staging
      inputParameters:
      - name: product_sku
        in: path
      operations:
      - name: get-staging-status
        method: GET
  - type: http
    namespace: marketing-api
    baseUri: https://marketing-internal.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.marketing_api_token
    resources:
    - name: assets
      path: /products/{{product_sku}}/assets/status
      inputParameters:
      - name: product_sku
        in: path
      operations:
      - name: get-asset-status
        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 → hardware-product-launch-readiness.yml

Audits app accessibility compliance by running automated checks, comparing against WCAG guidelines, generating a report, and creating remediation tasks in Jira.

naftiko: '0.5'
info:
  label: Apple Accessibility Compliance Audit
  description: Audits app accessibility compliance by running automated checks, comparing against WCAG guidelines, generating a report, and creating remediation tasks in Jira.
  tags:
  - accessibility
  - compliance
  - quality-assurance
  - jira
capability:
  exposes:
  - type: mcp
    namespace: a11y-audit
    port: 8080
    tools:
    - name: audit-accessibility
      description: 'Run accessibility audit on an app build: scan for issues, check WCAG compliance, generate report, and create Jira tasks for failures.'
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The app identifier.
      - name: build_id
        in: body
        type: string
        description: The build identifier to audit.
      steps:
      - name: run-scan
        type: call
        call: a11y-scanner.scan-build
        with:
          app_id: '{{app_id}}'
          build_id: '{{build_id}}'
      - name: check-wcag
        type: call
        call: a11y-scanner.check-wcag-compliance
        with:
          scan_id: '{{run-scan.scan_id}}'
          standard: WCAG-2.1-AA
      - name: generate-report
        type: call
        call: confluence.create-page
        with:
          space_key: A11Y
          title: 'Accessibility Audit: {{app_id}} build {{build_id}}'
          body: 'Issues found: {{run-scan.issue_count}}. WCAG compliance: {{check-wcag.compliance_percent}}%. Critical: {{check-wcag.critical_issues}}.'
      - name: create-remediation-tasks
        type: call
        call: jira.create-issue
        with:
          project: A11Y
          summary: Accessibility issues in {{app_id}} build {{build_id}}
          description: '{{run-scan.issue_count}} issues found. WCAG compliance: {{check-wcag.compliance_percent}}%. Report: {{generate-report.url}}'
          issue_type: Task
  consumes:
  - type: http
    namespace: a11y-scanner
    baseUri: https://a11y-tools.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.a11y_scanner_token
    resources:
    - name: scans
      path: /scans
      operations:
      - name: scan-build
        method: POST
    - name: compliance
      path: /scans/{{scan_id}}/wcag
      inputParameters:
      - name: scan_id
        in: path
      operations:
      - name: check-wcag-compliance
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://apple-eng.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: jira
    baseUri: https://apple-eng.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → apple-accessibility-compliance-audit.yml

Retrieves the current iCloud storage usage and quota for a given Apple ID, returning total capacity, used space, and breakdown by service.

naftiko: '0.5'
info:
  label: iCloud Storage Quota Lookup
  description: Retrieves the current iCloud storage usage and quota for a given Apple ID, returning total capacity, used space, and breakdown by service.
  tags:
  - cloud-services
  - icloud
  - storage
capability:
  exposes:
  - type: mcp
    namespace: icloud-storage
    port: 8080
    tools:
    - name: get-storage-quota
      description: Look up iCloud storage usage for an Apple ID. Returns total quota, used space, and per-service breakdown.
      inputParameters:
      - name: apple_id
        in: body
        type: string
        description: The Apple ID email address to look up storage for.
      call: icloud.get-storage-quota
      with:
        apple_id: '{{apple_id}}'
      outputParameters:
      - name: total_quota_gb
        type: number
        mapping: $.totalQuotaInGB
      - name: used_gb
        type: number
        mapping: $.usedSpaceInGB
      - name: plan_name
        type: string
        mapping: $.planName
  consumes:
  - type: http
    namespace: icloud
    baseUri: https://setup.icloud.com/api/v1
    authentication:
      type: bearer
      token: $secrets.icloud_admin_token
    resources:
    - name: storage
      path: /storage/{{apple_id}}/quota
      inputParameters:
      - name: apple_id
        in: path
      operations:
      - name: get-storage-quota
        method: GET
Open in Framework → View in Fleet → icloud-storage-quota-lookup.yml

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta application access, and sends a Slack welcome message.

naftiko: '0.5'
info:
  label: Employee Onboarding Orchestrator
  description: When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta application access, and sends a Slack welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - okta
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-employee-onboarding
      description: 'Given a Workday employee ID and start date, orchestrate the full onboarding sequence: fetch worker profile, open a ServiceNow ticket, provision Okta access, and send a Slack welcome.'
      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 ISO 8601 format, e.g. 2026-04-01.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_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
          assignment_group: IT_Onboarding
      - name: provision-okta
        type: call
        call: okta.create-user
        with:
          first_name: '{{get-worker.first_name}}'
          last_name: '{{get-worker.last_name}}'
          email: '{{get-worker.work_email}}'
          department: '{{get-worker.department}}'
      - name: send-slack-welcome
        type: call
        call: slack.post-message
        with:
          channel: '#welcome-new-hires'
          text: 'Welcome to Apple, {{get-worker.first_name}} {{get-worker.last_name}}! Starting {{start_date}}. IT ticket: {{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: /apple/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://apple.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: okta
    baseUri: https://apple.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        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 → employee-onboarding-orchestrator.yml

When a critical Datadog alert fires, creates a ServiceNow incident, pages the on-call team in PagerDuty, and posts a Slack alert to the ops channel.

naftiko: '0.5'
info:
  label: IT Incident Response Chain
  description: When a critical Datadog alert fires, creates a ServiceNow incident, pages the on-call team in PagerDuty, and posts a Slack alert to the ops channel.
  tags:
  - itsm
  - incident-response
  - datadog
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog alert ID, affected service, and severity, create a ServiceNow incident, trigger a PagerDuty page, and notify the ops Slack channel.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Datadog alert or monitor ID.
      - name: service_name
        in: body
        type: string
        description: The name of the affected service or application.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: critical, high, medium, or low.'
      - name: alert_message
        in: body
        type: string
        description: The alert message body from Datadog.
      steps:
      - name: create-incident
        type: call
        call: servicenow-ops.create-incident
        with:
          short_description: '{{severity}} alert: {{service_name}} — {{alert_id}}'
          description: '{{alert_message}}'
          urgency: '1'
          impact: '1'
          assignment_group: IT_Operations
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: '{{severity}} alert on {{service_name}}'
          service_id: $secrets.pagerduty_service_id
          body: '{{alert_message}}'
      - name: alert-slack
        type: call
        call: slack-ops.post-message
        with:
          channel: '#it-ops-alerts'
          text: 'INCIDENT: {{severity}} on {{service_name}} | Datadog: {{alert_id}} | SNOW: {{create-incident.number}} | PD: {{page-oncall.incident_number}}'
  consumes:
  - type: http
    namespace: servicenow-ops
    baseUri: https://apple.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
  - type: http
    namespace: slack-ops
    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 → it-incident-response-chain.yml

Handles Apple ID account lockouts by verifying identity, resetting the lockout flag, logging the event in Splunk, and notifying the user.

naftiko: '0.5'
info:
  label: Apple ID Account Lockout Remediation
  description: Handles Apple ID account lockouts by verifying identity, resetting the lockout flag, logging the event in Splunk, and notifying the user.
  tags:
  - identity
  - security
  - account-management
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: account-lockout
    port: 8080
    tools:
    - name: remediate-account-lockout
      description: Given a locked Apple ID, verify identity, reset lockout, log the event, and notify the account holder.
      inputParameters:
      - name: apple_id
        in: body
        type: string
        description: The locked Apple ID email.
      - name: support_ticket_id
        in: body
        type: string
        description: The associated support ticket ID.
      steps:
      - name: verify-identity
        type: call
        call: identity.verify-user
        with:
          apple_id: '{{apple_id}}'
      - name: reset-lockout
        type: call
        call: identity.reset-account-lockout
        with:
          apple_id: '{{apple_id}}'
          verification_token: '{{verify-identity.verification_token}}'
      - name: log-event
        type: call
        call: splunk.log-event
        with:
          index: security-events
          event: account_lockout_remediation
          apple_id: '{{apple_id}}'
          ticket_id: '{{support_ticket_id}}'
      - name: notify-user
        type: call
        call: ses.send-email
        with:
          to: '{{apple_id}}'
          subject: Your Apple ID Account Has Been Unlocked
          body: 'Your account lockout has been resolved. If you did not request this, please contact Apple Support immediately. Ref: {{support_ticket_id}}.'
  consumes:
  - type: http
    namespace: identity
    baseUri: https://idmsa.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.identity_service_token
    resources:
    - name: verification
      path: /users/{{apple_id}}/verify
      inputParameters:
      - name: apple_id
        in: path
      operations:
      - name: verify-user
        method: POST
    - name: lockout
      path: /users/{{apple_id}}/lockout/reset
      inputParameters:
      - name: apple_id
        in: path
      operations:
      - name: reset-account-lockout
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.apple.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /collector/event
      operations:
      - name: log-event
        method: POST
  - type: http
    namespace: ses
    baseUri: https://email.us-west-2.amazonaws.com/v2
    authentication:
      type: bearer
      token: $secrets.aws_ses_token
    resources:
    - name: emails
      path: /email/outbound-emails
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → apple-id-account-lockout-remediation.yml

On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, posts a Datadog deployment marker, and alerts the engineering team in Slack.

naftiko: '0.5'
info:
  label: GitHub CI/CD Pipeline Failure Response
  description: On a GitHub Actions pipeline failure on a protected branch, creates a Jira bug, posts a Datadog deployment marker, and alerts the engineering team in Slack.
  tags:
  - devops
  - cicd
  - github
  - jira
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: devops-cicd
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow failure event, create a Datadog deployment marker, open a Jira bug, and alert the engineering Slack channel.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository in org/repo format, e.g. apple/webkit.
      - name: workflow_name
        in: body
        type: string
        description: The GitHub Actions workflow name that failed.
      - name: branch_name
        in: body
        type: string
        description: The branch name where the failure occurred.
      - name: commit_sha
        in: body
        type: string
        description: The commit SHA that triggered the workflow.
      - name: run_url
        in: body
        type: string
        description: URL to the failed GitHub Actions run.
      steps:
      - name: create-dd-marker
        type: call
        call: datadog.create-event
        with:
          title: 'Pipeline failure: {{repo_name}}'
          text: Workflow {{workflow_name}} failed on {{branch_name}} at {{commit_sha}}
          alert_type: error
      - name: create-jira-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo_name}} / {{branch_name}} — {{workflow_name}}'
          description: 'Pipeline failure on {{branch_name}}. Commit: {{commit_sha}}. Run: {{run_url}}. Datadog event: {{create-dd-marker.id}}.'
      - name: alert-slack
        type: call
        call: slack-cicd.post-message
        with:
          channel: '#engineering-alerts'
          text: 'Pipeline Failure: {{repo_name}} | Branch: {{branch_name}} | Workflow: {{workflow_name}} | Jira: {{create-jira-bug.key}} | Run: {{run_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://apple.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-cicd
    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-ci-cd-pipeline-failure-response.yml

Validates Apple Maps point-of-interest data by cross-referencing with external sources, scoring quality, and flagging discrepancies for the maps data team.

naftiko: '0.5'
info:
  label: Apple Maps POI Data Quality Check
  description: Validates Apple Maps point-of-interest data by cross-referencing with external sources, scoring quality, and flagging discrepancies for the maps data team.
  tags:
  - maps
  - data-quality
  - analytics
  - operations
capability:
  exposes:
  - type: mcp
    namespace: maps-data-quality
    port: 8080
    tools:
    - name: check-poi-quality
      description: Given a POI ID, cross-reference with external data, compute quality score, and flag discrepancies for review.
      inputParameters:
      - name: poi_id
        in: body
        type: string
        description: The Apple Maps POI identifier.
      steps:
      - name: get-poi-data
        type: call
        call: maps-internal.get-poi
        with:
          poi_id: '{{poi_id}}'
      - name: cross-reference
        type: call
        call: external-data.verify-business
        with:
          name: '{{get-poi-data.name}}'
          address: '{{get-poi-data.address}}'
          phone: '{{get-poi-data.phone}}'
      - name: compute-quality-score
        type: call
        call: data-quality.score-poi
        with:
          apple_data: '{{get-poi-data}}'
          external_data: '{{cross-reference}}'
      - name: flag-if-needed
        type: call
        call: jira.create-issue
        with:
          project: MAPS
          summary: 'POI quality issue: {{get-poi-data.name}} ({{poi_id}})'
          description: 'Quality score: {{compute-quality-score.score}}. Discrepancies: {{compute-quality-score.discrepancies}}'
          issue_type: Task
  consumes:
  - type: http
    namespace: maps-internal
    baseUri: https://maps-data.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.maps_data_token
    resources:
    - name: pois
      path: /pois/{{poi_id}}
      inputParameters:
      - name: poi_id
        in: path
      operations:
      - name: get-poi
        method: GET
  - type: http
    namespace: external-data
    baseUri: https://external-data-verify.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.external_data_token
    resources:
    - name: businesses
      path: /verify
      operations:
      - name: verify-business
        method: POST
  - type: http
    namespace: data-quality
    baseUri: https://data-quality.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.data_quality_token
    resources:
    - name: scoring
      path: /pois/score
      operations:
      - name: score-poi
        method: POST
  - type: http
    namespace: jira
    baseUri: https://apple-eng.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → apple-maps-poi-data-quality-check.yml

Reviews publisher content submissions for Apple Books by validating EPUB format, checking DRM compliance, scanning for prohibited content, and routing for editorial approval.

naftiko: '0.5'
info:
  label: Apple Books Publisher Content Review
  description: Reviews publisher content submissions for Apple Books by validating EPUB format, checking DRM compliance, scanning for prohibited content, and routing for editorial approval.
  tags:
  - media
  - apple-books
  - content-review
  - publishing
capability:
  exposes:
  - type: mcp
    namespace: books-review
    port: 8080
    tools:
    - name: review-book-submission
      description: 'Review an Apple Books submission: validate EPUB, check DRM, scan content, and route for editorial approval.'
      inputParameters:
      - name: submission_id
        in: body
        type: string
        description: The book submission identifier.
      - name: publisher_id
        in: body
        type: string
        description: The publisher identifier.
      steps:
      - name: validate-epub
        type: call
        call: books-pipeline.validate-format
        with:
          submission_id: '{{submission_id}}'
      - name: check-drm
        type: call
        call: books-pipeline.check-drm-compliance
        with:
          submission_id: '{{submission_id}}'
          publisher_id: '{{publisher_id}}'
      - name: scan-content
        type: call
        call: content-safety.scan-text
        with:
          content_ref: '{{validate-epub.content_ref}}'
      - name: route-for-approval
        type: call
        call: jira.create-issue
        with:
          project: BOOKS
          summary: 'Book review: {{validate-epub.title}} by {{validate-epub.author}}'
          description: 'EPUB valid: {{validate-epub.is_valid}}. DRM: {{check-drm.status}}. Content scan: {{scan-content.result}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: books-pipeline
    baseUri: https://books-pipeline.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.books_pipeline_token
    resources:
    - name: validation
      path: /submissions/{{submission_id}}/validate
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: validate-format
        method: POST
    - name: drm
      path: /submissions/{{submission_id}}/drm-check
      inputParameters:
      - name: submission_id
        in: path
      operations:
      - name: check-drm-compliance
        method: POST
  - type: http
    namespace: content-safety
    baseUri: https://content-safety.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.content_safety_token
    resources:
    - name: scanning
      path: /scan
      operations:
      - name: scan-text
        method: POST
  - type: http
    namespace: jira
    baseUri: https://apple-eng.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → apple-books-publisher-content-review.yml

Optimizes Apple Search Ads campaigns by pulling performance data, analyzing with AI, adjusting bids, and reporting results to the marketing team.

naftiko: '0.5'
info:
  label: Apple Search Ads Campaign Optimizer
  description: Optimizes Apple Search Ads campaigns by pulling performance data, analyzing with AI, adjusting bids, and reporting results to the marketing team.
  tags:
  - marketing
  - apple-search-ads
  - optimization
  - advertising
capability:
  exposes:
  - type: mcp
    namespace: search-ads-optimizer
    port: 8080
    tools:
    - name: optimize-campaign
      description: 'Optimize an Apple Search Ads campaign: fetch metrics, analyze performance, adjust bids, and report to marketing.'
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Apple Search Ads campaign identifier.
      steps:
      - name: fetch-campaign-data
        type: call
        call: searchads.get-campaign-report
        with:
          campaign_id: '{{campaign_id}}'
      - name: analyze-performance
        type: call
        call: openai.analyze-text
        with:
          text: 'Campaign {{campaign_id}}: CPA=${{fetch-campaign-data.avg_cpa}}, CTR={{fetch-campaign-data.ctr}}%, Conversions={{fetch-campaign-data.conversions}}, Spend=${{fetch-campaign-data.total_spend}}'
          instruction: Analyze this Apple Search Ads campaign. Recommend bid adjustments and keyword changes. Return JSON with recommendations.
      - name: apply-bid-adjustments
        type: call
        call: searchads.update-campaign-bids
        with:
          campaign_id: '{{campaign_id}}'
          recommendations: '{{analyze-performance.recommendations}}'
      - name: report-results
        type: call
        call: slack.post-message
        with:
          channel: '#search-ads-marketing'
          text: 'Campaign {{campaign_id}} optimized. CPA: ${{fetch-campaign-data.avg_cpa}}. Bid changes applied: {{apply-bid-adjustments.changes_count}}. AI insights: {{analyze-performance.summary}}.'
  consumes:
  - type: http
    namespace: searchads
    baseUri: https://api.searchads.apple.com/api/v4
    authentication:
      type: bearer
      token: $secrets.search_ads_token
    resources:
    - name: reports
      path: /campaigns/{{campaign_id}}/reports
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: POST
    - name: bids
      path: /campaigns/{{campaign_id}}/bids
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: update-campaign-bids
        method: PUT
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        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 → apple-search-ads-campaign-optimizer.yml

Releases a new design system component by validating against HIG, publishing to the component library, updating documentation, and notifying design and engineering teams.

naftiko: '0.5'
info:
  label: Apple Design System Component Release
  description: Releases a new design system component by validating against HIG, publishing to the component library, updating documentation, and notifying design and engineering teams.
  tags:
  - design
  - developer-tools
  - documentation
  - ui
capability:
  exposes:
  - type: mcp
    namespace: design-system
    port: 8080
    tools:
    - name: release-component
      description: 'Release a design system component: validate HIG compliance, publish to library, update docs, and notify teams.'
      inputParameters:
      - name: component_name
        in: body
        type: string
        description: The component name, e.g. ActionButton, NavigationBar.
      - name: version
        in: body
        type: string
        description: The component version.
      steps:
      - name: validate-hig
        type: call
        call: hig-validator.check-compliance
        with:
          component_name: '{{component_name}}'
          version: '{{version}}'
      - name: publish-to-library
        type: call
        call: component-library.publish
        with:
          component_name: '{{component_name}}'
          version: '{{version}}'
          hig_status: '{{validate-hig.status}}'
      - name: update-docs
        type: call
        call: confluence.create-page
        with:
          space_key: DESIGN
          title: '{{component_name}} v{{version}} Release Notes'
          body: 'Component {{component_name}} v{{version}} released. HIG compliance: {{validate-hig.status}}. Library ID: {{publish-to-library.component_id}}.'
      - name: notify-teams
        type: call
        call: slack.post-message
        with:
          channel: '#design-engineering'
          text: 'Design system component {{component_name}} v{{version}} released. HIG: {{validate-hig.status}}. Docs: {{update-docs.url}}.'
  consumes:
  - type: http
    namespace: hig-validator
    baseUri: https://hig-tools.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.hig_validator_token
    resources:
    - name: compliance
      path: /components/{{component_name}}/check
      inputParameters:
      - name: component_name
        in: path
      operations:
      - name: check-compliance
        method: POST
  - type: http
    namespace: component-library
    baseUri: https://component-library.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.component_library_token
    resources:
    - name: components
      path: /components
      operations:
      - name: publish
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://apple-eng.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: 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 → apple-design-system-component-release.yml

Retrieves the status of an Xcode Cloud build run by its build ID, including result, duration, and workflow name.

naftiko: '0.5'
info:
  label: Xcode Cloud Build Status
  description: Retrieves the status of an Xcode Cloud build run by its build ID, including result, duration, and workflow name.
  tags:
  - developer-tools
  - ci-cd
  - xcode-cloud
capability:
  exposes:
  - type: mcp
    namespace: xcode-cloud
    port: 8080
    tools:
    - name: get-build-status
      description: Check the status of an Xcode Cloud build run. Returns build result, duration in seconds, and workflow name.
      inputParameters:
      - name: build_run_id
        in: body
        type: string
        description: The Xcode Cloud build run identifier.
      call: appstoreconnect.get-build-run
      with:
        build_run_id: '{{build_run_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data.attributes.completionStatus
      - name: duration_seconds
        type: number
        mapping: $.data.attributes.executionDuration
      - name: workflow_name
        type: string
        mapping: $.data.attributes.workflowName
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: build-runs
      path: /ciBuildRuns/{{build_run_id}}
      inputParameters:
      - name: build_run_id
        in: path
      operations:
      - name: get-build-run
        method: GET
Open in Framework → View in Fleet → xcode-cloud-build-status.yml

Analyzes iOS crash reports by fetching crash logs from App Store Connect, symbolizing with DSYM, classifying with OpenAI, and filing a Jira ticket.

naftiko: '0.5'
info:
  label: iOS Crash Report Analysis Pipeline
  description: Analyzes iOS crash reports by fetching crash logs from App Store Connect, symbolizing with DSYM, classifying with OpenAI, and filing a Jira ticket.
  tags:
  - developer-tools
  - crash-analysis
  - openai
  - jira
capability:
  exposes:
  - type: mcp
    namespace: crash-analysis
    port: 8080
    tools:
    - name: analyze-crash-report
      description: Given an app ID and crash signature, fetch crash logs, symbolize, classify root cause with AI, and create a Jira ticket.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The App Store Connect app identifier.
      - name: crash_signature
        in: body
        type: string
        description: The crash signature hash.
      steps:
      - name: fetch-crash-log
        type: call
        call: appstoreconnect.get-crash-log
        with:
          app_id: '{{app_id}}'
          signature: '{{crash_signature}}'
      - name: symbolize-crash
        type: call
        call: symbolication.symbolize
        with:
          crash_data: '{{fetch-crash-log.raw_crash}}'
          dsym_url: '{{fetch-crash-log.dsym_url}}'
      - name: classify-root-cause
        type: call
        call: openai.analyze-text
        with:
          text: '{{symbolize-crash.symbolicated_trace}}'
          instruction: Analyze this iOS crash stack trace. Identify the root cause, affected component, and suggested fix. Return JSON.
      - name: create-bug-ticket
        type: call
        call: jira.create-issue
        with:
          project: IOS
          summary: 'Crash: {{classify-root-cause.affected_component}} - {{classify-root-cause.root_cause}}'
          description: 'Stack trace: {{symbolize-crash.symbolicated_trace}}

            Suggested fix: {{classify-root-cause.suggested_fix}}'
          issue_type: Bug
          priority: High
  consumes:
  - type: http
    namespace: appstoreconnect
    baseUri: https://api.appstoreconnect.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.appstore_connect_token
    resources:
    - name: crashes
      path: /apps/{{app_id}}/diagnosticSignatures?filter[signature]={{signature}}
      inputParameters:
      - name: app_id
        in: path
      - name: signature
        in: query
      operations:
      - name: get-crash-log
        method: GET
  - type: http
    namespace: symbolication
    baseUri: https://symbolication.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.symbolication_token
    resources:
    - name: symbolicate
      path: /symbolicate
      operations:
      - name: symbolize
        method: POST
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: analyze-text
        method: POST
  - type: http
    namespace: jira
    baseUri: https://apple-eng.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → ios-crash-report-analysis-pipeline.yml

Retrieves details of an Apple Pay transaction by its transaction ID, including merchant, amount, status, and timestamp.

naftiko: '0.5'
info:
  label: Apple Pay Transaction Lookup
  description: Retrieves details of an Apple Pay transaction by its transaction ID, including merchant, amount, status, and timestamp.
  tags:
  - payments
  - apple-pay
  - fintech
capability:
  exposes:
  - type: mcp
    namespace: apple-pay
    port: 8080
    tools:
    - name: get-transaction
      description: Look up an Apple Pay transaction by ID. Returns merchant name, amount, currency, status, and timestamp.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The Apple Pay transaction identifier.
      call: applepay.get-transaction
      with:
        transaction_id: '{{transaction_id}}'
      outputParameters:
      - name: merchant_name
        type: string
        mapping: $.merchantName
      - name: amount
        type: number
        mapping: $.amount
      - name: status
        type: string
        mapping: $.transactionStatus
  consumes:
  - type: http
    namespace: applepay
    baseUri: https://apple-pay-gateway.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.apple_pay_api_token
    resources:
    - name: transactions
      path: /transactions/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-transaction
        method: GET
Open in Framework → View in Fleet → apple-pay-transaction-lookup.yml

When a PagerDuty incident goes unacknowledged past an SLA threshold, escalates the incident to senior on-call, creates a Jira post-mortem issue, and notifies the incident Slack channel.

naftiko: '0.5'
info:
  label: PagerDuty Incident Escalation
  description: When a PagerDuty incident goes unacknowledged past an SLA threshold, escalates the incident to senior on-call, creates a Jira post-mortem issue, and notifies the incident Slack channel.
  tags:
  - itsm
  - incident-response
  - pagerduty
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: incident-escalation
    port: 8080
    tools:
    - name: escalate-unacknowledged-incident
      description: Given a PagerDuty incident ID that is unacknowledged, escalate to the senior on-call policy, create a Jira post-mortem issue, and notify the incident Slack channel.
      inputParameters:
      - name: pd_incident_id
        in: body
        type: string
        description: The PagerDuty incident ID to escalate.
      - name: service_name
        in: body
        type: string
        description: The affected service name.
      - name: incident_summary
        in: body
        type: string
        description: Brief description of the incident.
      steps:
      - name: escalate-pd
        type: call
        call: pagerduty.escalate-incident
        with:
          incident_id: '{{pd_incident_id}}'
          escalation_policy_id: $secrets.pd_senior_escalation_policy
      - name: create-postmortem
        type: call
        call: jira-pm.create-issue
        with:
          project_key: PM
          issuetype: Post-mortem
          summary: 'Post-mortem: {{service_name}} — {{pd_incident_id}}'
          description: '{{incident_summary}} — PagerDuty incident escalated at {{escalate-pd.escalated_at}}.'
      - name: notify-incident-channel
        type: call
        call: slack-pd.post-message
        with:
          channel: '#incidents'
          text: 'Incident ESCALATED: {{service_name}} | PD: {{pd_incident_id}} | Post-mortem Jira: {{create-postmortem.key}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: incident-escalations
      path: /incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: escalate-incident
        method: PUT
  - type: http
    namespace: jira-pm
    baseUri: https://apple.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-pd
    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 → pagerduty-incident-escalation.yml

When a new supplier is approved in SAP Ariba, creates a Salesforce vendor account, opens a ServiceNow setup task, and notifies the procurement team via Slack.

naftiko: '0.5'
info:
  label: Supplier Onboarding Orchestration
  description: When a new supplier is approved in SAP Ariba, creates a Salesforce vendor account, opens a ServiceNow setup task, and notifies the procurement team via Slack.
  tags:
  - procurement
  - supply-chain
  - sap-ariba
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: supplier-onboarding
    port: 8080
    tools:
    - name: onboard-supplier
      description: Given an Ariba supplier ID and supplier name, create a Salesforce vendor account, open a ServiceNow setup task, and notify the procurement team in Slack.
      inputParameters:
      - name: ariba_supplier_id
        in: body
        type: string
        description: The SAP Ariba supplier ID.
      - name: supplier_name
        in: body
        type: string
        description: The supplier company name.
      - name: category
        in: body
        type: string
        description: The procurement category, e.g. IT Hardware, Logistics.
      steps:
      - name: create-sf-vendor
        type: call
        call: salesforce-sup.create-account
        with:
          name: '{{supplier_name}}'
          type: Vendor
          ariba_supplier_id: '{{ariba_supplier_id}}'
          category: '{{category}}'
      - name: create-setup-task
        type: call
        call: servicenow-sup.create-task
        with:
          short_description: 'Supplier setup: {{supplier_name}}'
          description: 'Ariba ID: {{ariba_supplier_id}}. Category: {{category}}. Salesforce Account: {{create-sf-vendor.account_id}}.'
          assignment_group: Procurement
      - name: notify-procurement
        type: call
        call: slack-sup.post-message
        with:
          channel: '#procurement-ops'
          text: 'New Supplier Onboarded: {{supplier_name}} | Category: {{category}} | Ariba: {{ariba_supplier_id}} | SNOW: {{create-setup-task.number}}'
  consumes:
  - type: http
    namespace: salesforce-sup
    baseUri: https://apple.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: servicenow-sup
    baseUri: https://apple.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack-sup
    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 → supplier-onboarding-orchestration.yml

Remotely wipes a lost or stolen device through Apple Business Essentials by verifying ownership, issuing the wipe command, logging the action, and notifying IT.

naftiko: '0.5'
info:
  label: Apple Business Essentials Device Wipe
  description: Remotely wipes a lost or stolen device through Apple Business Essentials by verifying ownership, issuing the wipe command, logging the action, and notifying IT.
  tags:
  - device-management
  - security
  - mdm
  - operations
capability:
  exposes:
  - type: mcp
    namespace: abe-device-wipe
    port: 8080
    tools:
    - name: wipe-lost-device
      description: 'Remotely wipe a lost device: verify ownership, issue wipe command, log the action, and notify IT.'
      inputParameters:
      - name: device_serial
        in: body
        type: string
        description: The device serial number.
      - name: requester_email
        in: body
        type: string
        description: The email of the person requesting the wipe.
      steps:
      - name: verify-ownership
        type: call
        call: abm.get-device
        with:
          serial_number: '{{device_serial}}'
      - name: issue-wipe
        type: call
        call: mdm-api.send-wipe-command
        with:
          device_serial: '{{device_serial}}'
          authorized_by: '{{requester_email}}'
      - name: log-action
        type: call
        call: splunk.log-event
        with:
          index: device-management
          event: remote_wipe
          device_serial: '{{device_serial}}'
          requester: '{{requester_email}}'
          wipe_command_id: '{{issue-wipe.command_id}}'
      - name: notify-it
        type: call
        call: slack.post-message
        with:
          channel: '#it-device-management'
          text: 'Remote wipe issued for {{device_serial}} ({{verify-ownership.model}}). Requested by {{requester_email}}. Command: {{issue-wipe.command_id}}.'
  consumes:
  - type: http
    namespace: abm
    baseUri: https://business.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.abm_api_token
    resources:
    - name: devices
      path: /devices/{{serial_number}}
      inputParameters:
      - name: serial_number
        in: path
      operations:
      - name: get-device
        method: GET
  - type: http
    namespace: mdm-api
    baseUri: https://mdm.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.mdm_api_token
    resources:
    - name: commands
      path: /devices/{{device_serial}}/commands/wipe
      inputParameters:
      - name: device_serial
        in: path
      operations:
      - name: send-wipe-command
        method: POST
  - type: http
    namespace: splunk
    baseUri: https://splunk.apple.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: events
      path: /collector/event
      operations:
      - name: log-event
        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 → apple-business-essentials-device-wipe.yml

Ingests new music content by validating metadata, uploading assets to S3, registering tracks in the catalog, and notifying the editorial team.

naftiko: '0.5'
info:
  label: Apple Music Content Ingestion Pipeline
  description: Ingests new music content by validating metadata, uploading assets to S3, registering tracks in the catalog, and notifying the editorial team.
  tags:
  - media
  - apple-music
  - content-ingestion
  - s3
capability:
  exposes:
  - type: mcp
    namespace: music-ingestion
    port: 8080
    tools:
    - name: ingest-album
      description: 'Ingest a new album: validate metadata, upload assets, register in catalog, and notify editorial team.'
      inputParameters:
      - name: album_upc
        in: body
        type: string
        description: The album UPC barcode.
      - name: label_id
        in: body
        type: string
        description: The record label identifier.
      steps:
      - name: validate-metadata
        type: call
        call: music-metadata.validate-album
        with:
          album_upc: '{{album_upc}}'
          label_id: '{{label_id}}'
      - name: upload-assets
        type: call
        call: s3.put-object
        with:
          bucket: apple-music-assets
          key: albums/{{album_upc}}/master
          metadata_ref: '{{validate-metadata.asset_manifest}}'
      - name: register-catalog
        type: call
        call: music-catalog.register-album
        with:
          album_upc: '{{album_upc}}'
          asset_url: '{{upload-assets.object_url}}'
          metadata: '{{validate-metadata.metadata}}'
      - name: notify-editorial
        type: call
        call: slack.post-message
        with:
          channel: '#music-editorial'
          text: 'New album ingested: {{validate-metadata.album_title}} (UPC: {{album_upc}}). Catalog ID: {{register-catalog.catalog_id}}.'
  consumes:
  - type: http
    namespace: music-metadata
    baseUri: https://music-metadata.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.music_metadata_token
    resources:
    - name: albums
      path: /albums/{{album_upc}}/validate
      inputParameters:
      - name: album_upc
        in: path
      operations:
      - name: validate-album
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.us-west-2.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: music-catalog
    baseUri: https://music-catalog.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.music_catalog_token
    resources:
    - name: albums
      path: /albums
      operations:
      - name: register-album
        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 → apple-music-content-ingestion-pipeline.yml

Geocodes an address string using the Apple MapKit JS API, returning latitude, longitude, and formatted address.

naftiko: '0.5'
info:
  label: Apple Maps Geocode Lookup
  description: Geocodes an address string using the Apple MapKit JS API, returning latitude, longitude, and formatted address.
  tags:
  - maps
  - geolocation
  - apple-maps
capability:
  exposes:
  - type: mcp
    namespace: apple-maps
    port: 8080
    tools:
    - name: geocode-address
      description: Geocode a street address using Apple Maps. Returns latitude, longitude, and structured address components.
      inputParameters:
      - name: address
        in: body
        type: string
        description: The street address to geocode.
      call: mapkit.geocode
      with:
        q: '{{address}}'
      outputParameters:
      - name: latitude
        type: number
        mapping: $.results[0].coordinate.latitude
      - name: longitude
        type: number
        mapping: $.results[0].coordinate.longitude
      - name: formatted_address
        type: string
        mapping: $.results[0].formattedAddress
  consumes:
  - type: http
    namespace: mapkit
    baseUri: https://maps-api.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.mapkit_token
    resources:
    - name: geocode
      path: /geocode?q={{q}}
      inputParameters:
      - name: q
        in: query
      operations:
      - name: geocode
        method: GET
Open in Framework → View in Fleet → apple-maps-geocode-lookup.yml

Tracks environmental compliance for product materials by querying supplier declarations, checking against Apple standards, and generating compliance certificates.

naftiko: '0.5'
info:
  label: Apple Environmental Compliance Tracker
  description: Tracks environmental compliance for product materials by querying supplier declarations, checking against Apple standards, and generating compliance certificates.
  tags:
  - sustainability
  - compliance
  - supply-chain
  - environmental
capability:
  exposes:
  - type: mcp
    namespace: env-compliance
    port: 8080
    tools:
    - name: track-material-compliance
      description: 'Track environmental compliance for a product material: query supplier data, check Apple standards, and generate certificate.'
      inputParameters:
      - name: material_id
        in: body
        type: string
        description: The material identifier.
      - name: product_sku
        in: body
        type: string
        description: The product SKU the material is used in.
      steps:
      - name: get-supplier-declaration
        type: call
        call: supplier-portal.get-material-declaration
        with:
          material_id: '{{material_id}}'
      - name: check-standards
        type: call
        call: env-standards.validate-material
        with:
          material_data: '{{get-supplier-declaration}}'
          product_sku: '{{product_sku}}'
      - name: generate-certificate
        type: call
        call: compliance-docs.generate-cert
        with:
          material_id: '{{material_id}}'
          product_sku: '{{product_sku}}'
          compliance_result: '{{check-standards.result}}'
      - name: log-result
        type: call
        call: snowflake.execute-query
        with:
          query: INSERT INTO env_compliance_log VALUES ('{{material_id}}', '{{product_sku}}', '{{check-standards.result}}', current_timestamp())
          warehouse: COMPLIANCE_WH
  consumes:
  - type: http
    namespace: supplier-portal
    baseUri: https://supplier-portal.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.supplier_portal_token
    resources:
    - name: materials
      path: /materials/{{material_id}}/declaration
      inputParameters:
      - name: material_id
        in: path
      operations:
      - name: get-material-declaration
        method: GET
  - type: http
    namespace: env-standards
    baseUri: https://env-standards.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.env_standards_token
    resources:
    - name: validation
      path: /validate
      operations:
      - name: validate-material
        method: POST
  - type: http
    namespace: compliance-docs
    baseUri: https://compliance-docs.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_docs_token
    resources:
    - name: certificates
      path: /certificates
      operations:
      - name: generate-cert
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://apple.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → apple-environmental-compliance-tracker.yml

When a new employee joins Apple, provisions appropriate Okta application assignments based on their department and role as defined in Workday.

naftiko: '0.5'
info:
  label: Okta User Access Provisioning
  description: When a new employee joins Apple, provisions appropriate Okta application assignments based on their department and role as defined in Workday.
  tags:
  - identity
  - security
  - okta
  - workday
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-provisioning
    port: 8080
    tools:
    - name: provision-okta-access
      description: Given a Workday employee ID and Okta user ID, retrieve their department and role from Workday, then assign the appropriate Okta application groups.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the employee.
      - name: okta_user_id
        in: body
        type: string
        description: The Okta user ID for the employee.
      steps:
      - name: get-worker-profile
        type: call
        call: workday-okta.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: assign-app-groups
        type: call
        call: okta-prov.assign-group
        with:
          user_id: '{{okta_user_id}}'
          department: '{{get-worker-profile.department}}'
  consumes:
  - type: http
    namespace: workday-okta
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /apple/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-prov
    baseUri: https://apple.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/{{user_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: assign-group
        method: PUT
Open in Framework → View in Fleet → okta-user-access-provisioning.yml

Manages iOS over-the-air update rollouts by checking device eligibility, staging firmware, initiating phased rollout, and monitoring adoption rates.

naftiko: '0.5'
info:
  label: iOS OTA Update Rollout Manager
  description: Manages iOS over-the-air update rollouts by checking device eligibility, staging firmware, initiating phased rollout, and monitoring adoption rates.
  tags:
  - software-updates
  - ota
  - ios
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: ios-ota
    port: 8080
    tools:
    - name: manage-ota-rollout
      description: 'Manage iOS OTA update rollout: check eligibility, stage firmware, initiate phased rollout, and monitor adoption.'
      inputParameters:
      - name: ios_version
        in: body
        type: string
        description: The iOS version to roll out, e.g. 19.2.
      - name: target_devices
        in: body
        type: string
        description: The target device models, e.g. iPhone16,1.
      - name: rollout_percent
        in: body
        type: number
        description: The initial rollout percentage.
      steps:
      - name: check-eligibility
        type: call
        call: ota-service.check-device-eligibility
        with:
          ios_version: '{{ios_version}}'
          device_model: '{{target_devices}}'
      - name: stage-firmware
        type: call
        call: ota-service.stage-firmware
        with:
          ios_version: '{{ios_version}}'
          eligible_count: '{{check-eligibility.eligible_count}}'
      - name: initiate-rollout
        type: call
        call: ota-service.start-rollout
        with:
          ios_version: '{{ios_version}}'
          rollout_percent: '{{rollout_percent}}'
          firmware_id: '{{stage-firmware.firmware_id}}'
      - name: report-status
        type: call
        call: slack.post-message
        with:
          channel: '#ios-updates'
          text: 'iOS {{ios_version}} OTA rollout started at {{rollout_percent}}% for {{target_devices}}. Eligible devices: {{check-eligibility.eligible_count}}. Firmware: {{stage-firmware.firmware_id}}.'
  consumes:
  - type: http
    namespace: ota-service
    baseUri: https://ota-updates.apple.com/api/v2
    authentication:
      type: bearer
      token: $secrets.ota_service_token
    resources:
    - name: eligibility
      path: /eligibility
      operations:
      - name: check-device-eligibility
        method: POST
    - name: staging
      path: /firmware/stage
      operations:
      - name: stage-firmware
        method: POST
    - name: rollouts
      path: /rollouts
      operations:
      - name: start-rollout
        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 → ios-ota-update-rollout-manager.yml

Checks the status of an Apple Wallet pass by pass type and serial number, returning validity and last update.

naftiko: '0.5'
info:
  label: Apple Wallet Pass Status Check
  description: Checks the status of an Apple Wallet pass by pass type and serial number, returning validity and last update.
  tags:
  - digital-wallets
  - apple-wallet
  - mobile
capability:
  exposes:
  - type: mcp
    namespace: apple-wallet
    port: 8080
    tools:
    - name: get-pass-status
      description: Check Apple Wallet pass validity by pass type ID and serial number. Returns pass status, last updated date, and voided flag.
      inputParameters:
      - name: pass_type_id
        in: body
        type: string
        description: The pass type identifier.
      - name: serial_number
        in: body
        type: string
        description: The pass serial number.
      call: wallet-api.get-pass
      with:
        pass_type_id: '{{pass_type_id}}'
        serial_number: '{{serial_number}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.pass.status
      - name: last_updated
        type: string
        mapping: $.pass.lastUpdated
      - name: is_voided
        type: boolean
        mapping: $.pass.voided
  consumes:
  - type: http
    namespace: wallet-api
    baseUri: https://wallet-api.apple.com/v1
    authentication:
      type: bearer
      token: $secrets.wallet_api_token
    resources:
    - name: passes
      path: /passes/{{pass_type_id}}/{{serial_number}}
      inputParameters:
      - name: pass_type_id
        in: path
      - name: serial_number
        in: path
      operations:
      - name: get-pass
        method: GET
Open in Framework → View in Fleet → apple-wallet-pass-status-check.yml

Searches the Apple Fitness+ workout catalog by workout type, returning available sessions with trainer, duration, and difficulty.

naftiko: '0.5'
info:
  label: Apple Fitness+ Workout Catalog
  description: Searches the Apple Fitness+ workout catalog by workout type, returning available sessions with trainer, duration, and difficulty.
  tags:
  - health
  - fitness
  - apple-fitness
capability:
  exposes:
  - type: mcp
    namespace: fitness-plus
    port: 8080
    tools:
    - name: search-workouts
      description: Search Fitness+ workouts by type. Returns matching sessions with trainer name, duration, and difficulty level.
      inputParameters:
      - name: workout_type
        in: body
        type: string
        description: The workout type, e.g. HIIT, Yoga, Cycling, Strength.
      call: fitness-api.search-workouts
      with:
        workout_type: '{{workout_type}}'
      outputParameters:
      - name: workouts
        type: array
        mapping: $.data.workouts
      - name: total_count
        type: number
        mapping: $.data.totalCount
  consumes:
  - type: http
    namespace: fitness-api
    baseUri: https://fitness.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.fitness_api_token
    resources:
    - name: workouts
      path: /workouts?type={{workout_type}}
      inputParameters:
      - name: workout_type
        in: query
      operations:
      - name: search-workouts
        method: GET
Open in Framework → View in Fleet → apple-fitness-workout-catalog.yml

Creates a new Terraform Cloud workspace for a given project and environment, and notifies the infrastructure team via Slack.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Provisioning
  description: Creates a new Terraform Cloud workspace for a given project and environment, and notifies the infrastructure team via Slack.
  tags:
  - cloud
  - infrastructure
  - terraform
  - devops
  - slack
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-terraform-workspace
      description: Given a project name and environment, create a Terraform Cloud workspace in the Apple Terraform organization and notify the infrastructure Slack channel.
      inputParameters:
      - name: project_name
        in: body
        type: string
        description: The project name for the new workspace.
      - name: environment
        in: body
        type: string
        description: 'The deployment environment: dev, staging, or prod.'
      steps:
      - name: create-workspace
        type: call
        call: terraform.create-workspace
        with:
          org: apple
          name: '{{project_name}}-{{environment}}'
      - name: notify-infra
        type: call
        call: slack-tf.post-message
        with:
          channel: '#infrastructure-team'
          text: 'Terraform workspace created: {{project_name}}-{{environment}}. ID: {{create-workspace.workspace_id}}.'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/{{org}}/workspaces
      inputParameters:
      - name: org
        in: path
      operations:
      - name: create-workspace
        method: POST
  - type: http
    namespace: slack-tf
    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 → terraform-cloud-workspace-provisioning.yml

Monitors renewable energy generation across Apple facilities by querying solar and wind output, comparing against consumption, and reporting sustainability metrics.

naftiko: '0.5'
info:
  label: Apple Renewable Energy Monitoring
  description: Monitors renewable energy generation across Apple facilities by querying solar and wind output, comparing against consumption, and reporting sustainability metrics.
  tags:
  - sustainability
  - energy
  - monitoring
  - operations
capability:
  exposes:
  - type: mcp
    namespace: renewable-energy
    port: 8080
    tools:
    - name: monitor-energy-output
      description: 'Monitor renewable energy: query generation data, compare against consumption, calculate sustainability metrics, and report.'
      inputParameters:
      - name: facility_id
        in: body
        type: string
        description: The Apple facility identifier.
      - name: date
        in: body
        type: string
        description: The monitoring date in YYYY-MM-DD format.
      steps:
      - name: get-generation-data
        type: call
        call: energy-api.get-generation
        with:
          facility_id: '{{facility_id}}'
          date: '{{date}}'
      - name: get-consumption-data
        type: call
        call: energy-api.get-consumption
        with:
          facility_id: '{{facility_id}}'
          date: '{{date}}'
      - name: calculate-metrics
        type: call
        call: sustainability-api.calculate-metrics
        with:
          generation_kwh: '{{get-generation-data.total_kwh}}'
          consumption_kwh: '{{get-consumption-data.total_kwh}}'
          facility_id: '{{facility_id}}'
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: '#sustainability'
          text: 'Energy report for {{facility_id}} on {{date}}: Generated={{get-generation-data.total_kwh}}kWh, Consumed={{get-consumption-data.total_kwh}}kWh, Renewable ratio={{calculate-metrics.renewable_percent}}%.'
  consumes:
  - type: http
    namespace: energy-api
    baseUri: https://energy-monitoring.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.energy_api_token
    resources:
    - name: generation
      path: /facilities/{{facility_id}}/generation?date={{date}}
      inputParameters:
      - name: facility_id
        in: path
      - name: date
        in: query
      operations:
      - name: get-generation
        method: GET
    - name: consumption
      path: /facilities/{{facility_id}}/consumption?date={{date}}
      inputParameters:
      - name: facility_id
        in: path
      - name: date
        in: query
      operations:
      - name: get-consumption
        method: GET
  - type: http
    namespace: sustainability-api
    baseUri: https://sustainability.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sustainability_api_token
    resources:
    - name: metrics
      path: /metrics/calculate
      operations:
      - name: calculate-metrics
        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 → apple-renewable-energy-monitoring.yml

Manages content localization by extracting subtitles, translating via AI, uploading to the content delivery network, and notifying the localization team.

naftiko: '0.5'
info:
  label: Apple TV+ Content Localization Workflow
  description: Manages content localization by extracting subtitles, translating via AI, uploading to the content delivery network, and notifying the localization team.
  tags:
  - media
  - apple-tv
  - localization
  - content-delivery
capability:
  exposes:
  - type: mcp
    namespace: tv-localization
    port: 8080
    tools:
    - name: localize-content
      description: 'Localize Apple TV+ content: extract subtitles, translate to target language, upload to CDN, and notify localization team.'
      inputParameters:
      - name: content_id
        in: body
        type: string
        description: The Apple TV+ content identifier.
      - name: target_language
        in: body
        type: string
        description: The target language code, e.g. es, fr, ja.
      steps:
      - name: extract-subtitles
        type: call
        call: content-pipeline.extract-subtitles
        with:
          content_id: '{{content_id}}'
      - name: translate-subtitles
        type: call
        call: openai.translate-text
        with:
          text: '{{extract-subtitles.subtitle_text}}'
          target_language: '{{target_language}}'
      - name: upload-to-cdn
        type: call
        call: cdn-api.upload-asset
        with:
          content_id: '{{content_id}}'
          asset_type: subtitles
          language: '{{target_language}}'
          data: '{{translate-subtitles.translated_text}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#localization'
          text: 'Localized subtitles for {{content_id}} in {{target_language}} uploaded to CDN. Asset URL: {{upload-to-cdn.asset_url}}.'
  consumes:
  - type: http
    namespace: content-pipeline
    baseUri: https://content-pipeline.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.content_pipeline_token
    resources:
    - name: subtitles
      path: /content/{{content_id}}/subtitles
      inputParameters:
      - name: content_id
        in: path
      operations:
      - name: extract-subtitles
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: translate-text
        method: POST
  - type: http
    namespace: cdn-api
    baseUri: https://cdn-management.apple.com/api/v1
    authentication:
      type: bearer
      token: $secrets.cdn_api_token
    resources:
    - name: assets
      path: /assets
      operations:
      - name: upload-asset
        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 → apple-tv-content-localization-workflow.yml

After a Bitbucket Pipeline completes, updates the Jira issue with deployment info, tags the Confluence release page, and notifies the team on Slack.

naftiko: '0.5'
info:
  label: Deployment Tracker
  description: After a Bitbucket Pipeline completes, updates the Jira issue with deployment info, tags the Confluence release page, and notifies the team on Slack.
  tags:
  - ci-cd
  - deployments
  - bitbucket
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: deployment-tracking
    port: 8080
    tools:
    - name: track-deployment
      description: Record a deployment by updating Jira, appending to Confluence release notes, and notifying Slack.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key tied to this deployment.
      - name: environment
        in: body
        type: string
        description: Target environment (staging, production).
      - name: version
        in: body
        type: string
        description: The release version string.
      - name: release_page_id
        in: body
        type: string
        description: Confluence release notes page ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for deployment alerts.
      steps:
      - name: transition-issue
        type: call
        call: jira.transition-issue
        with:
          issue_key: '{{issue_key}}'
          transition:
            id: '31'
      - name: add-comment
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{issue_key}}'
          body: Deployed version {{version}} to {{environment}}.
      - name: update-release-page
        type: call
        call: confluence.update-page
        with:
          page_id: '{{release_page_id}}'
          title: Release {{version}}
          body:
            representation: storage
            value: <p>Version {{version}} deployed to {{environment}} on {{issue_key}}.</p>
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Deployed {{version}} to {{environment}}. Jira: {{issue_key}}. Release notes: https://atlassian-corp.atlassian.net/wiki/pages/viewpage.action?pageId={{release_page_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: transitions
      path: /issue/{{issue_key}}/transitions
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: transition-issue
        method: POST
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → deployment-tracker.yml

Searches Confluence content using CQL and returns page titles, space keys, and URLs. Used for knowledge discovery across documentation.

naftiko: '0.5'
info:
  label: Confluence Search
  description: Searches Confluence content using CQL and returns page titles, space keys, and URLs. Used for knowledge discovery across documentation.
  tags:
  - knowledge-base
  - search
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: confluence-search
    port: 8080
    tools:
    - name: search-content
      description: Search Confluence content using CQL (Confluence Query Language).
      inputParameters:
      - name: cql
        in: body
        type: string
        description: The CQL query string.
      call: confluence.search
      with:
        cql: '{{cql}}'
      outputParameters:
      - name: results
        type: string
        mapping: $.results
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-search.yml

Checks the latest pipeline run status for a Bitbucket repository. Returns build state, result, duration, and trigger type.

naftiko: '0.5'
info:
  label: Bitbucket Pipeline Status
  description: Checks the latest pipeline run status for a Bitbucket repository. Returns build state, result, duration, and trigger type.
  tags:
  - ci-cd
  - pipelines
  - bitbucket
capability:
  exposes:
  - type: mcp
    namespace: bitbucket-pipelines
    port: 8080
    tools:
    - name: get-latest-pipeline
      description: Get the latest Bitbucket Pipeline run for a repository.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: The Bitbucket workspace slug.
      - name: repo_slug
        in: body
        type: string
        description: The repository slug.
      call: bitbucket.get-pipelines
      with:
        workspace: '{{workspace}}'
        repo_slug: '{{repo_slug}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.values[0].state.name
      - name: result
        type: string
        mapping: $.values[0].state.result.name
      - name: duration
        type: string
        mapping: $.values[0].duration_in_seconds
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: pipelines
      path: /repositories/{{workspace}}/{{repo_slug}}/pipelines/
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      operations:
      - name: get-pipelines
        method: GET
Open in Framework → View in Fleet → bitbucket-pipeline-status.yml

Links a Confluence runbook page to a Jira incident, logs execution steps as Jira comments, and broadcasts progress on Slack during incident remediation.

naftiko: '0.5'
info:
  label: Runbook Execution Tracker
  description: Links a Confluence runbook page to a Jira incident, logs execution steps as Jira comments, and broadcasts progress on Slack during incident remediation.
  tags:
  - incident-management
  - runbooks
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: runbook-tracker
    port: 8080
    tools:
    - name: track-runbook-execution
      description: Track runbook execution by linking Confluence runbook to Jira incident and posting progress to Slack.
      inputParameters:
      - name: runbook_page_id
        in: body
        type: string
        description: Confluence runbook page ID.
      - name: incident_key
        in: body
        type: string
        description: Jira incident issue key.
      - name: step_description
        in: body
        type: string
        description: Current step being executed.
      - name: slack_channel
        in: body
        type: string
        description: Incident Slack channel.
      steps:
      - name: get-runbook
        type: call
        call: confluence.get-page
        with:
          page_id: '{{runbook_page_id}}'
      - name: log-step
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{incident_key}}'
          body: 'Runbook step: {{step_description}} (Runbook: {{get-runbook.title}})'
      - name: broadcast-progress
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Runbook ''{{get-runbook.title}}'' - Executing: {{step_description}} for incident {{incident_key}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → runbook-execution-tracker.yml

Lists all Confluence spaces accessible to the authenticated user. Returns space keys, names, and types for navigation and discovery.

naftiko: '0.5'
info:
  label: Confluence Space List
  description: Lists all Confluence spaces accessible to the authenticated user. Returns space keys, names, and types for navigation and discovery.
  tags:
  - knowledge-base
  - collaboration
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: confluence-spaces
    port: 8080
    tools:
    - name: list-spaces
      description: List all Confluence spaces. Returns space key, name, and type.
      inputParameters: []
      call: confluence.list-spaces
      with: {}
      outputParameters:
      - name: spaces
        type: string
        mapping: $.results
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: spaces
      path: /spaces
      operations:
      - name: list-spaces
        method: GET
Open in Framework → View in Fleet → confluence-space-list.yml

Collects incident data, generates timeline, creates postmortem document, and schedules review meeting.

naftiko: '0.5'
info:
  label: Incident Postmortem Pipeline
  description: Collects incident data, generates timeline, creates postmortem document, and schedules review meeting.
  tags:
  - sre
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sre
    port: 8080
    tools:
    - name: atlassian_incident_postmortem_pipeline
      description: Orchestrate incident postmortem pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-jira.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Incident Postmortem Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian.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: confluence
    baseUri: https://atlassian.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-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 → incident-postmortem-pipeline.yml

Escalates a Jira Service Management ticket by raising priority, assigning to an escalation group, notifying on Slack, and paging via Opsgenie.

naftiko: '0.5'
info:
  label: Service Desk Ticket Escalation
  description: Escalates a Jira Service Management ticket by raising priority, assigning to an escalation group, notifying on Slack, and paging via Opsgenie.
  tags:
  - incident-management
  - service-desk
  - jira
  - slack
  - opsgenie
capability:
  exposes:
  - type: mcp
    namespace: service-desk-escalation
    port: 8080
    tools:
    - name: escalate-ticket
      description: 'Escalate a service desk ticket: raise priority, reassign, notify Slack, and page on-call.'
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira Service Management ticket key.
      - name: escalation_reason
        in: body
        type: string
        description: Reason for escalation.
      - name: slack_channel
        in: body
        type: string
        description: Escalation Slack channel.
      steps:
      - name: get-issue
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{issue_key}}'
      - name: raise-priority
        type: call
        call: jira.update-issue
        with:
          issue_key: '{{issue_key}}'
          fields:
            priority:
              name: High
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'ESCALATION: {{issue_key}} - {{get-issue.fields.summary}}. Reason: {{escalation_reason}}'
      - name: page-oncall
        type: call
        call: opsgenie.create-alert
        with:
          message: 'Escalated: {{issue_key}} - {{get-issue.fields.summary}}'
          priority: P2
          description: '{{escalation_reason}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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
      - name: update-issue
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: opsgenie
    baseUri: https://api.opsgenie.com/v2
    authentication:
      type: bearer
      token: $secrets.opsgenie_api_key
    resources:
    - name: alerts
      path: /alerts
      operations:
      - name: create-alert
        method: POST
Open in Framework → View in Fleet → service-desk-ticket-escalation.yml

Queries metric values from a monitoring dashboard. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Metric Dashboard Query
  description: Queries metric values from a monitoring dashboard. Used by Atlassian teams.
  tags:
  - software
  - github
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: get-metric_dashboard_query
      description: Queries metric values from a monitoring dashboard. Used by Atlassian teams.
      inputParameters:
      - name: metric_name
        in: body
        type: string
        description: The metric_name to look up.
      call: github.get-metric_name
      with:
        metric_name: '{{metric_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: atlassian_github_metric_dashbo
        method: GET
Open in Framework → View in Fleet → atlassian-metric-dashboard-query.yml

Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB.

naftiko: '0.5'
info:
  label: IT Asset Lifecycle Pipeline
  description: Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB.
  tags:
  - operations
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: it_asset_lifecycle_pipeline
      description: Orchestrate it asset lifecycle pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: IT Asset Lifecycle Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://atlassian.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: snowflake
    baseUri: https://atlassian.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 → it-asset-lifecycle-pipeline.yml

Queries Elasticsearch for log entries matching a pattern within a time range. Returns matching documents for incident investigation.

naftiko: '0.5'
info:
  label: Elasticsearch Log Search
  description: Queries Elasticsearch for log entries matching a pattern within a time range. Returns matching documents for incident investigation.
  tags:
  - observability
  - logging
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: log-search
    port: 8080
    tools:
    - name: search-logs
      description: Search Elasticsearch logs by query string and time range.
      inputParameters:
      - name: index_pattern
        in: body
        type: string
        description: Elasticsearch index pattern (e.g. logs-*).
      - name: query_string
        in: body
        type: string
        description: The search query.
      - name: time_from
        in: body
        type: string
        description: Start time in ISO 8601.
      - name: time_to
        in: body
        type: string
        description: End time in ISO 8601.
      call: elasticsearch.search
      with:
        index: '{{index_pattern}}'
        query: '{{query_string}}'
        from: '{{time_from}}'
        to: '{{time_to}}'
      outputParameters:
      - name: total_hits
        type: string
        mapping: $.hits.total.value
      - name: hits
        type: string
        mapping: $.hits.hits
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://elasticsearch.atlassian-corp.com
    authentication:
      type: basic
      username: $secrets.elasticsearch_user
      password: $secrets.elasticsearch_password
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search
        method: POST
Open in Framework → View in Fleet → elasticsearch-log-search.yml

Retrieves Redis server info including memory usage, connected clients, and keyspace stats for capacity planning.

naftiko: '0.5'
info:
  label: Redis Cache Metrics Query
  description: Retrieves Redis server info including memory usage, connected clients, and keyspace stats for capacity planning.
  tags:
  - monitoring
  - caching
  - redis
capability:
  exposes:
  - type: mcp
    namespace: redis-monitoring
    port: 8080
    tools:
    - name: get-redis-info
      description: Query Redis server info for memory, clients, and keyspace statistics.
      inputParameters:
      - name: section
        in: body
        type: string
        description: Redis INFO section (memory, clients, keyspace, all).
      call: redis.get-info
      with:
        section: '{{section}}'
      outputParameters:
      - name: info
        type: string
        mapping: $
  consumes:
  - type: http
    namespace: redis
    baseUri: https://redis-admin.atlassian-corp.com/api/v1
    authentication:
      type: bearer
      token: $secrets.redis_admin_token
    resources:
    - name: info
      path: /info/{{section}}
      inputParameters:
      - name: section
        in: path
      operations:
      - name: get-info
        method: GET
Open in Framework → View in Fleet → redis-cache-metrics-query.yml

Creates a Confluence knowledge base article from structured content, links it to a Jira service desk ticket, and announces it on Slack.

naftiko: '0.5'
info:
  label: Knowledge Base Article Publisher
  description: Creates a Confluence knowledge base article from structured content, links it to a Jira service desk ticket, and announces it on Slack.
  tags:
  - knowledge-base
  - documentation
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: kb-publishing
    port: 8080
    tools:
    - name: publish-kb-article
      description: Create a Confluence KB article, link to Jira ticket, and notify Slack.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: title
        in: body
        type: string
        description: Article title.
      - name: content_html
        in: body
        type: string
        description: Article body in HTML.
      - name: issue_key
        in: body
        type: string
        description: Related Jira Service Desk ticket key.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for KB announcements.
      steps:
      - name: create-article
        type: call
        call: confluence.create-page
        with:
          spaceId: '{{space_key}}'
          title: '{{title}}'
          body:
            representation: storage
            value: '{{content_html}}'
      - name: link-to-jira
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{issue_key}}'
          body: 'KB article published: {{title}} - https://atlassian-corp.atlassian.net/wiki/pages/viewpage.action?pageId={{create-article.id}}'
      - name: announce
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'New KB article: {{title}}. Related to {{issue_key}}.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → knowledge-base-article-publisher.yml

Scans Bitbucket repository dependencies via SonarQube, creates Jira security issues for critical findings, and alerts the security team on Slack.

naftiko: '0.5'
info:
  label: Dependency Vulnerability Alert Pipeline
  description: Scans Bitbucket repository dependencies via SonarQube, creates Jira security issues for critical findings, and alerts the security team on Slack.
  tags:
  - security
  - dependencies
  - sonarqube
  - jira
  - slack
  - bitbucket
capability:
  exposes:
  - type: mcp
    namespace: dependency-security
    port: 8080
    tools:
    - name: scan-dependencies
      description: Scan repo dependencies, create Jira tickets for vulnerabilities, and alert Slack.
      inputParameters:
      - name: sonar_project_key
        in: body
        type: string
        description: SonarQube project key.
      - name: project_key
        in: body
        type: string
        description: Jira project key for security issues.
      - name: slack_channel
        in: body
        type: string
        description: Security team Slack channel.
      steps:
      - name: get-vulnerabilities
        type: call
        call: sonarqube.get-issues
        with:
          componentKeys: '{{sonar_project_key}}'
          types: VULNERABILITY
          severities: CRITICAL,BLOCKER
      - name: create-security-issue
        type: call
        call: jira.create-issue
        with:
          fields:
            project:
              key: '{{project_key}}'
            summary: 'Critical vulnerabilities in {{sonar_project_key}}: {{get-vulnerabilities.total}} found'
            issuetype:
              name: Bug
            priority:
              name: Highest
            labels:
            - security
            - vulnerability
      - name: alert-team
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Security alert: {{get-vulnerabilities.total}} critical vulnerabilities found in {{sonar_project_key}}. Jira: {{create-security-issue.key}}'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.atlassian-corp.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: issues
      path: /issues/search
      inputParameters:
      - name: componentKeys
        in: query
      - name: types
        in: query
      - name: severities
        in: query
      operations:
      - name: get-issues
        method: GET
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → dependency-vulnerability-alert-pipeline.yml

Retrieves current monitoring alert status. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Alert Status Check
  description: Retrieves current monitoring alert status. Used by Atlassian teams.
  tags:
  - software
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: pagerduty
    port: 8080
    tools:
    - name: get-alert_status_check
      description: Retrieves current monitoring alert status. Used by Atlassian teams.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The alert_id to look up.
      call: pagerduty.get-alert_id
      with:
        alert_id: '{{alert_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: atlassian_alert_status_check
        method: GET
Open in Framework → View in Fleet → atlassian-alert-status-check.yml

Checks the health status of a monitored service. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Service Health Check
  description: Checks the health status of a monitored service. Used by Atlassian teams.
  tags:
  - software
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira
    port: 8080
    tools:
    - name: get-service_health_check
      description: Checks the health status of a monitored service. Used by Atlassian teams.
      inputParameters:
      - name: health_target
        in: body
        type: string
        description: The health_target to look up.
      call: jira.get-health_target
      with:
        health_target: '{{health_target}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian.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: atlassian_jira_service_health_
        method: GET
Open in Framework → View in Fleet → atlassian-service-health-check.yml

Retrieves compliance check status. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Compliance Check Status
  description: Retrieves compliance check status. Used by Atlassian teams.
  tags:
  - software
  - docker
capability:
  exposes:
  - type: mcp
    namespace: docker
    port: 8080
    tools:
    - name: get-compliance_check_status
      description: Retrieves compliance check status. Used by Atlassian teams.
      inputParameters:
      - name: check_id
        in: body
        type: string
        description: The check_id to look up.
      call: docker.get-check_id
      with:
        check_id: '{{check_id}}'
  consumes:
  - type: http
    namespace: docker
    baseUri: https://hub.docker.com/v2
    authentication:
      type: bearer
      token: $secrets.docker_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: atlassian_compliance_check_sta
        method: GET
Open in Framework → View in Fleet → atlassian-compliance-check-status.yml

Collects completed sprint issues from Jira, summarizes velocity metrics, and publishes a retrospective page in Confluence for team review.

naftiko: '0.5'
info:
  label: Sprint Retrospective Report Generator
  description: Collects completed sprint issues from Jira, summarizes velocity metrics, and publishes a retrospective page in Confluence for team review.
  tags:
  - agile
  - project-management
  - jira
  - confluence
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sprint-retro
    port: 8080
    tools:
    - name: generate-retro-report
      description: Given a sprint ID and Confluence space, gather sprint issues from Jira and publish a retro summary page.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID.
      - name: sprint_id
        in: body
        type: string
        description: The Jira sprint ID.
      - name: space_key
        in: body
        type: string
        description: The Confluence space key for the retro page.
      steps:
      - name: get-sprint
        type: call
        call: jira-agile.get-sprint
        with:
          sprint_id: '{{sprint_id}}'
      - name: get-sprint-issues
        type: call
        call: jira-agile.get-sprint-issues
        with:
          sprint_id: '{{sprint_id}}'
      - name: publish-retro
        type: call
        call: confluence.create-page
        with:
          spaceId: '{{space_key}}'
          title: 'Sprint Retrospective: {{get-sprint.name}}'
          body:
            representation: storage
            value: '<h2>Sprint: {{get-sprint.name}}</h2><p>Goal: {{get-sprint.goal}}</p><p>Total issues: {{get-sprint-issues.total}}</p><p>Completed: {{get-sprint-issues.total}}</p>'
  consumes:
  - type: http
    namespace: jira-agile
    baseUri: https://atlassian-corp.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /sprint/{{sprint_id}}
      inputParameters:
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint
        method: GET
    - name: sprint-issues
      path: /sprint/{{sprint_id}}/issue
      inputParameters:
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-issues
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.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 → sprint-retrospective-report-generator.yml

Attributes cloud costs to teams, generates chargeback reports, and distributes to engineering managers.

naftiko: '0.5'
info:
  label: Infrastructure Cost Allocation Pipeline
  description: Attributes cloud costs to teams, generates chargeback reports, and distributes to engineering managers.
  tags:
  - finops
  - snowflake
  - powerbi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: atlassian_infrastructure_cost_allocation
      description: Orchestrate infrastructure cost allocation 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-powerbi
        type: call
        call: powerbi.process-resource
        with:
          data: '{{get-snowflake.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Infrastructure Cost Allocation Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://atlassian.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: 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: powerbi-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 → infrastructure-cost-allocation-pipeline.yml

Queries PostgreSQL performance statistics for slow queries and returns execution times and query plans for database optimization.

naftiko: '0.5'
info:
  label: PostgreSQL Slow Query Report
  description: Queries PostgreSQL performance statistics for slow queries and returns execution times and query plans for database optimization.
  tags:
  - databases
  - performance
  - postgresql
capability:
  exposes:
  - type: mcp
    namespace: pg-performance
    port: 8080
    tools:
    - name: get-slow-queries
      description: Retrieve PostgreSQL slow queries exceeding a duration threshold.
      inputParameters:
      - name: database_id
        in: body
        type: string
        description: The database cluster identifier.
      - name: min_duration_ms
        in: body
        type: string
        description: Minimum query duration in milliseconds.
      call: postgresql.get-slow-queries
      with:
        database_id: '{{database_id}}'
        min_duration_ms: '{{min_duration_ms}}'
      outputParameters:
      - name: queries
        type: string
        mapping: $.slow_queries
  consumes:
  - type: http
    namespace: postgresql
    baseUri: https://pgadmin.atlassian-corp.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pgadmin_token
    resources:
    - name: slow-queries
      path: /clusters/{{database_id}}/slow-queries
      inputParameters:
      - name: database_id
        in: path
      - name: min_duration_ms
        in: query
      operations:
      - name: get-slow-queries
        method: GET
Open in Framework → View in Fleet → postgresql-slow-query-report.yml

Retrieves the details of a support ticket. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Ticket Details Lookup
  description: Retrieves the details of a support ticket. Used by Atlassian teams.
  tags:
  - software
  - kubernetes
capability:
  exposes:
  - type: mcp
    namespace: kubernetes
    port: 8080
    tools:
    - name: get-ticket_details_lookup
      description: Retrieves the details of a support ticket. Used by Atlassian teams.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The ticket_id to look up.
      call: kubernetes.get-ticket_id
      with:
        ticket_id: '{{ticket_id}}'
  consumes:
  - type: http
    namespace: k8s
    baseUri: https://atlassian-k8s.com/api/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: atlassian_ticket_details_looku
        method: GET
Open in Framework → View in Fleet → atlassian-ticket-details-lookup.yml

Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.

naftiko: '0.5'
info:
  label: Disaster Recovery Readiness Pipeline
  description: Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.
  tags:
  - disaster-recovery
  - servicenow
  - confluence
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: disaster-recovery
    port: 8080
    tools:
    - name: disaster_recovery_readiness_pipeline
      description: Orchestrate disaster recovery readiness pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-servicenow
        type: call
        call: servicenow.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-servicenow.result}}'
      - name: create-pagerduty
        type: call
        call: pagerduty.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Disaster Recovery Readiness Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://atlassian.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: confluence
    baseUri: https://atlassian.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-op
        method: POST
  - 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-op
        method: POST
Open in Framework → View in Fleet → disaster-recovery-readiness-pipeline.yml

Executes a PromQL instant query against Prometheus and returns the result vector. Used for ad-hoc metric lookups during troubleshooting.

naftiko: '0.5'
info:
  label: Prometheus Metric Query
  description: Executes a PromQL instant query against Prometheus and returns the result vector. Used for ad-hoc metric lookups during troubleshooting.
  tags:
  - monitoring
  - observability
  - prometheus
capability:
  exposes:
  - type: mcp
    namespace: prometheus-query
    port: 8080
    tools:
    - name: query-metric
      description: Execute a PromQL instant query.
      inputParameters:
      - name: promql
        in: body
        type: string
        description: The PromQL query expression.
      call: prometheus.instant-query
      with:
        query: '{{promql}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data.result
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.atlassian-corp.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: instant-query
        method: GET
Open in Framework → View in Fleet → prometheus-metric-query.yml

Queries cost and spending data. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Cost Report Query
  description: Queries cost and spending data. Used by Atlassian teams.
  tags:
  - software
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: powerbi
    port: 8080
    tools:
    - name: get-cost_report_query
      description: Queries cost and spending data. Used by Atlassian teams.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: The cost_center to look up.
      call: powerbi.get-cost_center
      with:
        cost_center: '{{cost_center}}'
  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: atlassian_cost_report_query
        method: GET
Open in Framework → View in Fleet → atlassian-cost-report-query.yml

Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.

naftiko: '0.5'
info:
  label: SLA Compliance Monitoring Pipeline
  description: Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.
  tags:
  - operations
  - datadog
  - servicenow
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: operations
    port: 8080
    tools:
    - name: sla_compliance_monitoring_pipeline
      description: Orchestrate sla compliance 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-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: SLA Compliance Monitoring Pipeline step 3 complete.
  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: servicenow
    baseUri: https://atlassian.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: 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: powerbi-op
        method: POST
Open in Framework → View in Fleet → sla-compliance-monitoring-pipeline.yml

Retrieves collection statistics from MongoDB including document count, storage size, and index sizes for capacity monitoring.

naftiko: '0.5'
info:
  label: MongoDB Collection Stats
  description: Retrieves collection statistics from MongoDB including document count, storage size, and index sizes for capacity monitoring.
  tags:
  - databases
  - monitoring
  - mongodb
capability:
  exposes:
  - type: mcp
    namespace: mongodb-stats
    port: 8080
    tools:
    - name: get-collection-stats
      description: Get MongoDB collection statistics by database and collection name.
      inputParameters:
      - name: database
        in: body
        type: string
        description: MongoDB database name.
      - name: collection
        in: body
        type: string
        description: Collection name.
      call: mongodb.collection-stats
      with:
        database: '{{database}}'
        collection: '{{collection}}'
      outputParameters:
      - name: count
        type: string
        mapping: $.count
      - name: size
        type: string
        mapping: $.size
      - name: storageSize
        type: string
        mapping: $.storageSize
  consumes:
  - type: http
    namespace: mongodb
    baseUri: https://mongodb-atlas.atlassian-corp.com/api/atlas/v1.0
    authentication:
      type: basic
      username: $secrets.mongodb_public_key
      password: $secrets.mongodb_private_key
    resources:
    - name: collection-stats
      path: /groups/{{database}}/collStats/{{collection}}
      inputParameters:
      - name: database
        in: path
      - name: collection
        in: path
      operations:
      - name: collection-stats
        method: GET
Open in Framework → View in Fleet → mongodb-collection-stats.yml

Transitions a Jira issue to a new status, adds a comment, and posts the status change to a Slack channel for team visibility.

naftiko: '0.5'
info:
  label: Jira Issue Transition with Slack Update
  description: Transitions a Jira issue to a new status, adds a comment, and posts the status change to a Slack channel for team visibility.
  tags:
  - project-management
  - workflow
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: issue-workflow
    port: 8080
    tools:
    - name: transition-and-notify
      description: Transition a Jira issue and notify a Slack channel of the change.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key.
      - name: transition_id
        in: body
        type: string
        description: The target transition ID.
      - name: comment
        in: body
        type: string
        description: Comment to add to the issue.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel ID.
      steps:
      - name: transition
        type: call
        call: jira.transition-issue
        with:
          issue_key: '{{issue_key}}'
          transition:
            id: '{{transition_id}}'
      - name: add-comment
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{issue_key}}'
          body: '{{comment}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Issue {{issue_key}} transitioned. Comment: {{comment}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: transitions
      path: /issue/{{issue_key}}/transitions
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: transition-issue
        method: POST
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-issue-transition-with-slack-update.yml

Retrieves the current on-call engineer for an Opsgenie schedule. Used by incident coordinators to identify the responsible responder.

naftiko: '0.5'
info:
  label: Opsgenie On-Call Schedule Lookup
  description: Retrieves the current on-call engineer for an Opsgenie schedule. Used by incident coordinators to identify the responsible responder.
  tags:
  - incident-management
  - on-call
  - opsgenie
capability:
  exposes:
  - type: mcp
    namespace: opsgenie-oncall
    port: 8080
    tools:
    - name: get-on-call
      description: Get the current on-call participant for an Opsgenie schedule.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: The Opsgenie schedule ID or name.
      call: opsgenie.get-on-call
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: on_call_participants
        type: string
        mapping: $.data.onCallParticipants
  consumes:
  - type: http
    namespace: opsgenie
    baseUri: https://api.opsgenie.com/v2
    authentication:
      type: bearer
      token: $secrets.opsgenie_api_key
    resources:
    - name: schedules
      path: /schedules/{{schedule_id}}/on-calls
      inputParameters:
      - name: schedule_id
        in: path
      operations:
      - name: get-on-call
        method: GET
Open in Framework → View in Fleet → opsgenie-on-call-schedule-lookup.yml

Retrieves all inline and footer comments on a Confluence page. Used by content reviewers to audit feedback.

naftiko: '0.5'
info:
  label: Confluence Page Comment Thread
  description: Retrieves all inline and footer comments on a Confluence page. Used by content reviewers to audit feedback.
  tags:
  - knowledge-base
  - collaboration
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: confluence-comments
    port: 8080
    tools:
    - name: get-page-comments
      description: List all comments on a Confluence page by page ID.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Confluence page ID.
      call: confluence.get-comments
      with:
        page_id: '{{page_id}}'
      outputParameters:
      - name: comments
        type: string
        mapping: $.results
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: comments
      path: /pages/{{page_id}}/footer-comments
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-comments
        method: GET
Open in Framework → View in Fleet → confluence-page-comment-thread.yml

Scans a Docker image for vulnerabilities, creates a Jira security ticket if critical findings exist, and alerts the security Slack channel.

naftiko: '0.5'
info:
  label: Docker Image Vulnerability Scanner
  description: Scans a Docker image for vulnerabilities, creates a Jira security ticket if critical findings exist, and alerts the security Slack channel.
  tags:
  - security
  - container-security
  - docker
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: container-security
    port: 8080
    tools:
    - name: scan-docker-image
      description: Scan a Docker image for vulnerabilities and report findings to Jira and Slack.
      inputParameters:
      - name: image_name
        in: body
        type: string
        description: Full Docker image name with tag.
      - name: project_key
        in: body
        type: string
        description: Jira project key for security issues.
      - name: slack_channel
        in: body
        type: string
        description: Security Slack channel ID.
      steps:
      - name: scan-image
        type: call
        call: docker-registry.scan-image
        with:
          image: '{{image_name}}'
      - name: create-security-ticket
        type: call
        call: jira.create-issue
        with:
          fields:
            project:
              key: '{{project_key}}'
            summary: 'Vulnerability scan: {{image_name}}'
            issuetype:
              name: Bug
            priority:
              name: High
            description: 'Scan results for {{image_name}}: {{scan-image.vulnerabilities}}'
            labels:
            - security
            - container
      - name: alert-security
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: Container scan complete for {{image_name}}. Findings logged in {{create-security-ticket.key}}.
  consumes:
  - type: http
    namespace: docker-registry
    baseUri: https://registry.atlassian-corp.com/v2
    authentication:
      type: bearer
      token: $secrets.docker_registry_token
    resources:
    - name: scan
      path: /{{image}}/scan
      inputParameters:
      - name: image
        in: path
      operations:
      - name: scan-image
        method: POST
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → docker-image-vulnerability-scanner.yml

Searches for Jira users by display name or email. Returns account IDs, display names, and email addresses for assignment workflows.

naftiko: '0.5'
info:
  label: Jira User Search
  description: Searches for Jira users by display name or email. Returns account IDs, display names, and email addresses for assignment workflows.
  tags:
  - project-management
  - user-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira-users
    port: 8080
    tools:
    - name: search-users
      description: Search for Jira users by query string (name or email).
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search query (display name or email).
      call: jira.search-users
      with:
        query: '{{query}}'
      outputParameters:
      - name: users
        type: string
        mapping: $
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: user-search
      path: /user/search
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-users
        method: GET
Open in Framework → View in Fleet → jira-user-search.yml

Detects SLA breaches, escalates to engineering, creates priority tickets, and notifies account managers.

naftiko: '0.5'
info:
  label: Customer Issue Escalation Pipeline
  description: Detects SLA breaches, escalates to engineering, creates priority tickets, and notifies account managers.
  tags:
  - support
  - jira
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: support
    port: 8080
    tools:
    - name: customer_issue_escalation_pipeline
      description: Orchestrate customer issue escalation pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-confluence
        type: call
        call: confluence.process-resource
        with:
          data: '{{get-jira.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Customer Issue Escalation Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian.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: confluence
    baseUri: https://atlassian.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-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-issue-escalation-pipeline.yml

Validates release criteria, checks test coverage, verifies documentation, and approves deployment.

naftiko: '0.5'
info:
  label: Release Readiness Checklist Pipeline
  description: Validates release criteria, checks test coverage, verifies documentation, and approves deployment.
  tags:
  - devops
  - jira
  - github
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: atlassian_release_readiness_checklist_pi
      description: Orchestrate release readiness checklist pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-github
        type: call
        call: github.process-resource
        with:
          data: '{{get-jira.result}}'
      - name: create-confluence
        type: call
        call: confluence.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Release Readiness Checklist Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian.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: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: github-op
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://atlassian.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-op
        method: POST
Open in Framework → View in Fleet → release-readiness-checklist-pipeline.yml

On new developer onboarding, provisions Bitbucket repo access, creates a Jira onboarding epic, adds Confluence getting-started page, and sends Slack welcome.

naftiko: '0.5'
info:
  label: New Hire Developer Onboarding
  description: On new developer onboarding, provisions Bitbucket repo access, creates a Jira onboarding epic, adds Confluence getting-started page, and sends Slack welcome.
  tags:
  - onboarding
  - devops
  - bitbucket
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: dev-onboarding
    port: 8080
    tools:
    - name: onboard-developer
      description: Orchestrate new developer onboarding across Bitbucket, Jira, Confluence, and Slack.
      inputParameters:
      - name: developer_name
        in: body
        type: string
        description: Full name of the new developer.
      - name: developer_email
        in: body
        type: string
        description: Email address.
      - name: team_workspace
        in: body
        type: string
        description: Bitbucket workspace to grant access.
      - name: project_key
        in: body
        type: string
        description: Jira project key for onboarding epic.
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: slack_channel
        in: body
        type: string
        description: Slack welcome channel ID.
      steps:
      - name: invite-to-workspace
        type: call
        call: bitbucket.invite-user
        with:
          workspace: '{{team_workspace}}'
          email: '{{developer_email}}'
      - name: create-onboarding-epic
        type: call
        call: jira.create-issue
        with:
          fields:
            project:
              key: '{{project_key}}'
            summary: 'Onboarding: {{developer_name}}'
            issuetype:
              name: Epic
            description: Onboarding tasks for {{developer_name}} ({{developer_email}}).
      - name: create-starter-page
        type: call
        call: confluence.create-page
        with:
          spaceId: '{{space_key}}'
          title: Getting Started - {{developer_name}}
          body:
            representation: storage
            value: '<h2>Welcome {{developer_name}}</h2><p>Your onboarding epic: {{create-onboarding-epic.key}}</p>'
      - name: send-welcome
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: Welcome {{developer_name}}! Your onboarding epic is {{create-onboarding-epic.key}}. Check out your getting started page in Confluence.
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: workspace-members
      path: /workspaces/{{workspace}}/members
      inputParameters:
      - name: workspace
        in: path
      operations:
      - name: invite-user
        method: POST
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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: confluence
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-hire-developer-onboarding.yml

Gathers all resolved Jira issues for a release version, compiles release notes in Confluence, and announces the release in Slack.

naftiko: '0.5'
info:
  label: Release Notes Compiler
  description: Gathers all resolved Jira issues for a release version, compiles release notes in Confluence, and announces the release in Slack.
  tags:
  - release-management
  - documentation
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: release-notes
    port: 8080
    tools:
    - name: compile-release-notes
      description: Query Jira for resolved issues in a version, create Confluence release notes, and post to Slack.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: fix_version
        in: body
        type: string
        description: The fix version string.
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for release announcements.
      steps:
      - name: query-resolved
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND fixVersion = '{{fix_version}}' AND status = Done
          maxResults: '200'
      - name: create-release-page
        type: call
        call: confluence.create-page
        with:
          spaceId: '{{space_key}}'
          title: 'Release Notes: {{fix_version}}'
          body:
            representation: storage
            value: '<h2>Release {{fix_version}}</h2><p>Total resolved issues: {{query-resolved.total}}</p>'
      - name: announce-release
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Release {{fix_version}} notes published. {{query-resolved.total}} issues resolved. View: https://atlassian-corp.atlassian.net/wiki/pages/viewpage.action?pageId={{create-release-page.id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → release-notes-compiler.yml

Queries Prometheus for active alerts and returns alert names, severity labels, and descriptions. Used by SRE teams to check current system health.

naftiko: '0.5'
info:
  label: Prometheus Alert Query
  description: Queries Prometheus for active alerts and returns alert names, severity labels, and descriptions. Used by SRE teams to check current system health.
  tags:
  - monitoring
  - observability
  - prometheus
capability:
  exposes:
  - type: mcp
    namespace: prometheus-alerts
    port: 8080
    tools:
    - name: get-active-alerts
      description: Retrieve all currently firing alerts from Prometheus.
      inputParameters: []
      call: prometheus.get-alerts
      with: {}
      outputParameters:
      - name: alerts
        type: string
        mapping: $.data.alerts
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.atlassian-corp.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: alerts
      path: /alerts
      operations:
      - name: get-alerts
        method: GET
Open in Framework → View in Fleet → prometheus-alert-query.yml

Creates a Jira change request issue, attaches a Confluence impact assessment page, obtains approval comments, and notifies the release channel on Slack.

naftiko: '0.5'
info:
  label: Change Request Workflow
  description: Creates a Jira change request issue, attaches a Confluence impact assessment page, obtains approval comments, and notifies the release channel on Slack.
  tags:
  - change-management
  - devops
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: submit-change-request
      description: Submit a change request through Jira, document impact in Confluence, and notify on Slack.
      inputParameters:
      - name: summary
        in: body
        type: string
        description: Change request summary.
      - name: impact_description
        in: body
        type: string
        description: Detailed impact assessment.
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: space_key
        in: body
        type: string
        description: Confluence space key for impact docs.
      - name: slack_channel
        in: body
        type: string
        description: Slack release channel ID.
      steps:
      - name: create-change-request
        type: call
        call: jira.create-issue
        with:
          fields:
            project:
              key: '{{project_key}}'
            summary: 'CR: {{summary}}'
            issuetype:
              name: Change Request
            description: '{{impact_description}}'
      - name: create-impact-page
        type: call
        call: confluence.create-page
        with:
          spaceId: '{{space_key}}'
          title: 'Impact Assessment: {{summary}}'
          body:
            representation: storage
            value: '<h2>Change Request: {{create-change-request.key}}</h2><p>{{impact_description}}</p>'
      - name: notify-release-channel
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Change Request submitted: {{create-change-request.key}} - {{summary}}. Impact doc: https://atlassian-corp.atlassian.net/wiki/spaces/{{space_key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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: confluence
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → change-request-workflow.yml

Retrieves a Slack user profile by user ID. Returns display name, email, title, and status text.

naftiko: '0.5'
info:
  label: Slack User Profile Lookup
  description: Retrieves a Slack user profile by user ID. Returns display name, email, title, and status text.
  tags:
  - communications
  - user-management
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack-users
    port: 8080
    tools:
    - name: get-user-profile
      description: Look up a Slack user profile by user ID.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Slack user ID.
      call: slack.get-profile
      with:
        user: '{{user_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.profile.display_name
      - name: email
        type: string
        mapping: $.profile.email
      - name: title
        type: string
        mapping: $.profile.title
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: users
      path: /users.profile.get
      inputParameters:
      - name: user
        in: query
      operations:
      - name: get-profile
        method: GET
Open in Framework → View in Fleet → slack-user-profile-lookup.yml

Creates a Jira bug issue from a structured report and posts a notification to a designated Slack channel with the new issue link.

naftiko: '0.5'
info:
  label: Bug Report to Jira with Slack Notification
  description: Creates a Jira bug issue from a structured report and posts a notification to a designated Slack channel with the new issue link.
  tags:
  - bug-tracking
  - project-management
  - jira
  - slack
  - notifications
capability:
  exposes:
  - type: mcp
    namespace: bug-reporting
    port: 8080
    tools:
    - name: file-bug-report
      description: Create a Jira bug from a report summary and severity, then notify a Slack channel.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      - name: summary
        in: body
        type: string
        description: Bug summary.
      - name: description
        in: body
        type: string
        description: Detailed bug description.
      - name: priority
        in: body
        type: string
        description: Priority name (e.g. High, Medium, Low).
      - name: slack_channel
        in: body
        type: string
        description: Slack channel ID for notification.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          fields:
            project:
              key: '{{project_key}}'
            summary: '{{summary}}'
            description: '{{description}}'
            issuetype:
              name: Bug
            priority:
              name: '{{priority}}'
      - name: notify-channel
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'New bug filed: [{{create-bug.key}}] {{summary}} - Priority: {{priority}}. View: https://atlassian-corp.atlassian.net/browse/{{create-bug.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → bug-report-to-jira-with-slack-notification.yml

Checks status of a recent deployment. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Deployment Status Check
  description: Checks status of a recent deployment. Used by Atlassian teams.
  tags:
  - software
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: get-deployment_status_check
      description: Checks status of a recent deployment. Used by Atlassian teams.
      inputParameters:
      - name: deployment_id
        in: body
        type: string
        description: The deployment_id to look up.
      call: snowflake.get-deployment_id
      with:
        deployment_id: '{{deployment_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://atlassian.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: atlassian_deployment_status_ch
        method: GET
Open in Framework → View in Fleet → atlassian-deployment-status-check.yml

Retrieves code repository information. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Repository Info Lookup
  description: Retrieves code repository information. Used by Atlassian teams.
  tags:
  - software
  - prometheus
capability:
  exposes:
  - type: mcp
    namespace: prometheus
    port: 8080
    tools:
    - name: get-repository_info_lookup
      description: Retrieves code repository information. Used by Atlassian teams.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repo_name to look up.
      call: prometheus.get-repo_name
      with:
        repo_name: '{{repo_name}}'
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://atlassian-prometheus.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: atlassian_repository_info_look
        method: GET
Open in Framework → View in Fleet → atlassian-repository-info-lookup.yml

After an incident is resolved, gathers Jira incident details, collects Opsgenie alert timeline, and publishes a postmortem page in Confluence.

naftiko: '0.5'
info:
  label: Postmortem Report Generator
  description: After an incident is resolved, gathers Jira incident details, collects Opsgenie alert timeline, and publishes a postmortem page in Confluence.
  tags:
  - incident-management
  - postmortem
  - jira
  - opsgenie
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: postmortem
    port: 8080
    tools:
    - name: generate-postmortem
      description: Compile incident data from Jira and Opsgenie, then publish a postmortem Confluence page.
      inputParameters:
      - name: incident_key
        in: body
        type: string
        description: The Jira incident issue key.
      - name: alert_id
        in: body
        type: string
        description: The Opsgenie alert ID.
      - name: space_key
        in: body
        type: string
        description: Confluence space key for postmortems.
      steps:
      - name: get-incident
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{incident_key}}'
      - name: get-alert
        type: call
        call: opsgenie.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: publish-postmortem
        type: call
        call: confluence.create-page
        with:
          spaceId: '{{space_key}}'
          title: 'Postmortem: {{get-incident.fields.summary}}'
          body:
            representation: storage
            value: '<h2>Incident: {{incident_key}}</h2><p>Summary: {{get-incident.fields.summary}}</p><p>Alert: {{get-alert.data.message}}</p><p>Created: {{get-alert.data.createdAt}}</p><p>Acknowledged: {{get-alert.data.acknowledged}}</p>'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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: opsgenie
    baseUri: https://api.opsgenie.com/v2
    authentication:
      type: bearer
      token: $secrets.opsgenie_api_key
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.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 → postmortem-report-generator.yml

Collects Prometheus resource metrics and Jira workload data, then publishes an updated capacity planning page in Confluence for engineering leadership.

naftiko: '0.5'
info:
  label: Capacity Planning Dashboard Updater
  description: Collects Prometheus resource metrics and Jira workload data, then publishes an updated capacity planning page in Confluence for engineering leadership.
  tags:
  - capacity-planning
  - monitoring
  - prometheus
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: capacity-planning
    port: 8080
    tools:
    - name: update-capacity-dashboard
      description: Gather resource metrics from Prometheus and workload from Jira, then update Confluence capacity page.
      inputParameters:
      - name: promql_cpu
        in: body
        type: string
        description: PromQL query for CPU utilization.
      - name: promql_memory
        in: body
        type: string
        description: PromQL query for memory utilization.
      - name: project_key
        in: body
        type: string
        description: Jira project key for workload.
      - name: page_id
        in: body
        type: string
        description: Confluence capacity page ID.
      steps:
      - name: query-cpu
        type: call
        call: prometheus.instant-query
        with:
          query: '{{promql_cpu}}'
      - name: query-memory
        type: call
        call: prometheus.instant-query
        with:
          query: '{{promql_memory}}'
      - name: query-workload
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND status != Done
          maxResults: '1'
      - name: update-page
        type: call
        call: confluence.update-page
        with:
          page_id: '{{page_id}}'
          title: Capacity Planning Dashboard
          body:
            representation: storage
            value: '<h2>Resource Utilization</h2><p>CPU: {{query-cpu.data.result}}</p><p>Memory: {{query-memory.data.result}}</p><h2>Workload</h2><p>Open issues: {{query-workload.total}}</p>'
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.atlassian-corp.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: instant-query
        method: GET
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → capacity-planning-dashboard-updater.yml

Queries a Jenkins job for the latest build result, duration, and timestamp. Used by DevOps teams to monitor CI pipeline health.

naftiko: '0.5'
info:
  label: Jenkins Build Status Check
  description: Queries a Jenkins job for the latest build result, duration, and timestamp. Used by DevOps teams to monitor CI pipeline health.
  tags:
  - ci-cd
  - continuous-integration
  - jenkins
capability:
  exposes:
  - type: mcp
    namespace: jenkins-builds
    port: 8080
    tools:
    - name: get-last-build
      description: Get the last build status for a Jenkins job.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: The Jenkins job name.
      call: jenkins.get-last-build
      with:
        job_name: '{{job_name}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.result
      - name: duration
        type: string
        mapping: $.duration
      - name: timestamp
        type: string
        mapping: $.timestamp
  consumes:
  - type: http
    namespace: jenkins
    baseUri: https://jenkins.atlassian-corp.com
    authentication:
      type: basic
      username: $secrets.jenkins_user
      password: $secrets.jenkins_api_token
    resources:
    - name: builds
      path: /job/{{job_name}}/lastBuild/api/json
      inputParameters:
      - name: job_name
        in: path
      operations:
      - name: get-last-build
        method: GET
Open in Framework → View in Fleet → jenkins-build-status-check.yml

Retrieves details for a specific Bitbucket pull request including title, state, reviewers, and merge status.

naftiko: '0.5'
info:
  label: Bitbucket Pull Request Details
  description: Retrieves details for a specific Bitbucket pull request including title, state, reviewers, and merge status.
  tags:
  - code-review
  - version-control
  - bitbucket
capability:
  exposes:
  - type: mcp
    namespace: bitbucket-prs
    port: 8080
    tools:
    - name: get-pull-request
      description: Fetch a Bitbucket pull request by workspace, repo slug, and PR ID.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: The Bitbucket workspace slug.
      - name: repo_slug
        in: body
        type: string
        description: The repository slug.
      - name: pr_id
        in: body
        type: string
        description: The pull request ID.
      call: bitbucket.get-pr
      with:
        workspace: '{{workspace}}'
        repo_slug: '{{repo_slug}}'
        pr_id: '{{pr_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: state
        type: string
        mapping: $.state
      - name: author
        type: string
        mapping: $.author.display_name
      - name: reviewers
        type: string
        mapping: $.reviewers
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: pull-requests
      path: /repositories/{{workspace}}/{{repo_slug}}/pullrequests/{{pr_id}}
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      - name: pr_id
        in: path
      operations:
      - name: get-pr
        method: GET
Open in Framework → View in Fleet → bitbucket-pull-request-details.yml

Creates a numbered ADR page in Confluence, links it to a Jira architecture decision ticket, and posts the ADR summary to a Slack architecture channel.

naftiko: '0.5'
info:
  label: Architecture Decision Record Publisher
  description: Creates a numbered ADR page in Confluence, links it to a Jira architecture decision ticket, and posts the ADR summary to a Slack architecture channel.
  tags:
  - architecture
  - documentation
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: adr-publishing
    port: 8080
    tools:
    - name: publish-adr
      description: Publish an Architecture Decision Record to Confluence, link to Jira, and notify Slack.
      inputParameters:
      - name: adr_number
        in: body
        type: string
        description: ADR sequential number.
      - name: title
        in: body
        type: string
        description: ADR title.
      - name: context
        in: body
        type: string
        description: Context and problem statement.
      - name: decision
        in: body
        type: string
        description: The decision made.
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: issue_key
        in: body
        type: string
        description: Related Jira issue key.
      - name: slack_channel
        in: body
        type: string
        description: Architecture Slack channel.
      steps:
      - name: create-adr-page
        type: call
        call: confluence.create-page
        with:
          spaceId: '{{space_key}}'
          title: 'ADR-{{adr_number}}: {{title}}'
          body:
            representation: storage
            value: <h2>Context</h2><p>{{context}}</p><h2>Decision</h2><p>{{decision}}</p>
      - name: link-to-jira
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{issue_key}}'
          body: 'ADR-{{adr_number}} published: {{title}}'
      - name: notify-architects
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'New ADR published: ADR-{{adr_number}} - {{title}}. Decision: {{decision}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → architecture-decision-record-publisher.yml

Checks the current status of a project. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Project Status Check
  description: Checks the current status of a project. Used by Atlassian teams.
  tags:
  - software
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: get-project_status_check
      description: Checks the current status of a project. Used by Atlassian teams.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The project_key to look up.
      call: grafana.get-project_key
      with:
        project_key: '{{project_key}}'
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://atlassian-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: atlassian_project_status_check
        method: GET
Open in Framework → View in Fleet → atlassian-project-status-check.yml

Searches code across Bitbucket repositories in a workspace using a query string. Returns matching file paths and snippets.

naftiko: '0.5'
info:
  label: Bitbucket Code Search
  description: Searches code across Bitbucket repositories in a workspace using a query string. Returns matching file paths and snippets.
  tags:
  - source-code-management
  - search
  - bitbucket
capability:
  exposes:
  - type: mcp
    namespace: bitbucket-search
    port: 8080
    tools:
    - name: search-code
      description: Search code across Bitbucket repositories by query string.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: Bitbucket workspace slug.
      - name: search_query
        in: body
        type: string
        description: Code search query.
      call: bitbucket.search-code
      with:
        workspace: '{{workspace}}'
        search_query: '{{search_query}}'
      outputParameters:
      - name: results
        type: string
        mapping: $.values
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: code-search
      path: /workspaces/{{workspace}}/search/code
      inputParameters:
      - name: workspace
        in: path
      - name: search_query
        in: query
      operations:
      - name: search-code
        method: GET
Open in Framework → View in Fleet → bitbucket-code-search.yml

Retrieves user account details from the directory. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian User Account Lookup
  description: Retrieves user account details from the directory. Used by Atlassian teams.
  tags:
  - software
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: datadog
    port: 8080
    tools:
    - name: get-user_account_lookup
      description: Retrieves user account details from the directory. Used by Atlassian teams.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The user_id to look up.
      call: datadog.get-user_id
      with:
        user_id: '{{user_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: atlassian_user_account_lookup
        method: GET
Open in Framework → View in Fleet → atlassian-user-account-lookup.yml

Retrieves metadata for a Bitbucket Cloud repository including default branch, language, and last updated timestamp.

naftiko: '0.5'
info:
  label: Bitbucket Repository Info
  description: Retrieves metadata for a Bitbucket Cloud repository including default branch, language, and last updated timestamp.
  tags:
  - source-code-management
  - version-control
  - bitbucket
capability:
  exposes:
  - type: mcp
    namespace: bitbucket-repos
    port: 8080
    tools:
    - name: get-repository
      description: Get Bitbucket repository metadata by workspace and repo slug.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: The Bitbucket workspace slug.
      - name: repo_slug
        in: body
        type: string
        description: The repository slug.
      call: bitbucket.get-repo
      with:
        workspace: '{{workspace}}'
        repo_slug: '{{repo_slug}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.full_name
      - name: default_branch
        type: string
        mapping: $.mainbranch.name
      - name: language
        type: string
        mapping: $.language
      - name: updated_on
        type: string
        mapping: $.updated_on
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: repositories
      path: /repositories/{{workspace}}/{{repo_slug}}
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → bitbucket-repository-info.yml

When a Bitbucket PR is opened, runs SonarQube analysis, creates a Jira code review subtask, and posts the review link to Slack.

naftiko: '0.5'
info:
  label: Pull Request Review Pipeline
  description: When a Bitbucket PR is opened, runs SonarQube analysis, creates a Jira code review subtask, and posts the review link to Slack.
  tags:
  - code-review
  - ci-cd
  - bitbucket
  - sonarqube
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pr-review
    port: 8080
    tools:
    - name: initiate-pr-review
      description: On PR open, trigger SonarQube scan, create a Jira review task, and notify Slack.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: Bitbucket workspace slug.
      - name: repo_slug
        in: body
        type: string
        description: Bitbucket repository slug.
      - name: pr_id
        in: body
        type: string
        description: Pull request ID.
      - name: parent_issue_key
        in: body
        type: string
        description: The parent Jira issue key for the subtask.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for code review notifications.
      steps:
      - name: get-pr
        type: call
        call: bitbucket.get-pr
        with:
          workspace: '{{workspace}}'
          repo_slug: '{{repo_slug}}'
          pr_id: '{{pr_id}}'
      - name: trigger-scan
        type: call
        call: sonarqube.trigger-analysis
        with:
          project_key: '{{workspace}}_{{repo_slug}}'
      - name: create-review-task
        type: call
        call: jira.create-issue
        with:
          fields:
            project:
              key: '{{parent_issue_key}}'
            summary: 'Code Review: PR #{{pr_id}} - {{get-pr.title}}'
            issuetype:
              name: Sub-task
            parent:
              key: '{{parent_issue_key}}'
      - name: notify-reviewers
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Code review needed: PR #{{pr_id}} in {{workspace}}/{{repo_slug}} - {{get-pr.title}}. Jira: {{create-review-task.key}}. SonarQube scan initiated.'
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: pull-requests
      path: /repositories/{{workspace}}/{{repo_slug}}/pullrequests/{{pr_id}}
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      - name: pr_id
        in: path
      operations:
      - name: get-pr
        method: GET
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.atlassian-corp.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: analysis
      path: /ce/submit
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: trigger-analysis
        method: POST
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → pull-request-review-pipeline.yml

Runs a Terraform plan, posts the diff summary to a Confluence review page, creates a Jira approval task, and notifies the infrastructure Slack channel.

naftiko: '0.5'
info:
  label: Terraform Plan Review Pipeline
  description: Runs a Terraform plan, posts the diff summary to a Confluence review page, creates a Jira approval task, and notifies the infrastructure Slack channel.
  tags:
  - infrastructure
  - devops
  - terraform
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: infra-review
    port: 8080
    tools:
    - name: review-terraform-plan
      description: Submit a Terraform plan for review across Confluence, Jira, and Slack.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: Terraform Cloud workspace name.
      - name: run_id
        in: body
        type: string
        description: Terraform Cloud run ID.
      - name: space_key
        in: body
        type: string
        description: Confluence space key for infra docs.
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: slack_channel
        in: body
        type: string
        description: Infrastructure Slack channel.
      steps:
      - name: get-plan
        type: call
        call: terraform.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-review-page
        type: call
        call: confluence.create-page
        with:
          spaceId: '{{space_key}}'
          title: 'Terraform Plan Review: {{workspace_name}} - {{run_id}}'
          body:
            representation: storage
            value: '<h2>Plan Summary</h2><p>Workspace: {{workspace_name}}</p><p>Status: {{get-plan.data.attributes.status}}</p>'
      - name: create-approval-task
        type: call
        call: jira.create-issue
        with:
          fields:
            project:
              key: '{{project_key}}'
            summary: 'Approve Terraform plan: {{workspace_name}}'
            issuetype:
              name: Task
            description: Review and approve Terraform plan run {{run_id}} for workspace {{workspace_name}}.
      - name: notify-infra
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Terraform plan ready for review: {{workspace_name}}. Approval task: {{create-approval-task.key}}.'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_cloud_token
    resources:
    - name: runs
      path: /runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → terraform-plan-review-pipeline.yml

Calculates Jira epic progress by counting completed vs total child issues, updates the epic description with progress, and posts a weekly summary to Slack.

naftiko: '0.5'
info:
  label: Epic Progress Tracker
  description: Calculates Jira epic progress by counting completed vs total child issues, updates the epic description with progress, and posts a weekly summary to Slack.
  tags:
  - project-management
  - agile
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: epic-tracking
    port: 8080
    tools:
    - name: track-epic-progress
      description: Calculate epic progress from Jira, update the epic, and post summary to Slack.
      inputParameters:
      - name: epic_key
        in: body
        type: string
        description: The Jira epic issue key.
      - name: slack_channel
        in: body
        type: string
        description: Team Slack channel.
      steps:
      - name: get-epic-issues
        type: call
        call: jira.search-issues
        with:
          jql: '''Epic Link'' = {{epic_key}}'
          maxResults: '200'
      - name: get-done-issues
        type: call
        call: jira.search-issues
        with:
          jql: '''Epic Link'' = {{epic_key}} AND status = Done'
          maxResults: '200'
      - name: update-epic
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{epic_key}}'
          body: 'Progress update: {{get-done-issues.total}} / {{get-epic-issues.total}} issues completed.'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Epic {{epic_key}} progress: {{get-done-issues.total}}/{{get-epic-issues.total}} issues done.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → epic-progress-tracker.yml

Collects access entitlements, routes for review, revokes expired access, and creates audit records.

naftiko: '0.5'
info:
  label: Access Review Certification Pipeline
  description: Collects access entitlements, routes for review, revokes expired access, and creates audit records.
  tags:
  - security
  - okta
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: access_review_certification_pipeline
      description: Orchestrate access review certification pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-jira.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Access Review Certification Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian.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: servicenow
    baseUri: https://atlassian.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 → access-review-certification-pipeline.yml

Collects development metrics, analyzes trends, generates reports, and distributes to engineering leads.

naftiko: '0.5'
info:
  label: Developer Productivity Metrics Pipeline
  description: Collects development metrics, analyzes trends, generates reports, and distributes to engineering leads.
  tags:
  - engineering
  - github
  - snowflake
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: developer_productivity_metrics_pipeline
      description: Orchestrate developer productivity metrics pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-github
        type: call
        call: github.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-github.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Developer Productivity Metrics Pipeline step 3 complete.
  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-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://atlassian.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: 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: powerbi-op
        method: POST
Open in Framework → View in Fleet → developer-productivity-metrics-pipeline.yml

Retrieves all components defined in a Jira project. Used by engineering leads to audit component ownership and assignment coverage.

naftiko: '0.5'
info:
  label: Jira Project Component List
  description: Retrieves all components defined in a Jira project. Used by engineering leads to audit component ownership and assignment coverage.
  tags:
  - project-management
  - issue-tracking
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira-components
    port: 8080
    tools:
    - name: list-components
      description: List all components for a Jira project by project key.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key.
      call: jira.get-components
      with:
        project_key: '{{project_key}}'
      outputParameters:
      - name: components
        type: string
        mapping: $
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: components
      path: /project/{{project_key}}/components
      inputParameters:
      - name: project_key
        in: path
      operations:
      - name: get-components
        method: GET
Open in Framework → View in Fleet → jira-project-component-list.yml

Searches application logs for matching patterns. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Log Search Query
  description: Searches application logs for matching patterns. Used by Atlassian teams.
  tags:
  - software
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: confluence
    port: 8080
    tools:
    - name: get-log_search_query
      description: Searches application logs for matching patterns. Used by Atlassian teams.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: The search_query to look up.
      call: confluence.get-search_query
      with:
        search_query: '{{search_query}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://atlassian.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: atlassian_log_search_query
        method: GET
Open in Framework → View in Fleet → atlassian-log-search-query.yml

Collects in-progress Jira issues for a team, fetches recent Bitbucket commits, and posts a formatted standup summary to the team Slack channel.

naftiko: '0.5'
info:
  label: Standup Summary Bot
  description: Collects in-progress Jira issues for a team, fetches recent Bitbucket commits, and posts a formatted standup summary to the team Slack channel.
  tags:
  - agile
  - standups
  - jira
  - bitbucket
  - slack
capability:
  exposes:
  - type: mcp
    namespace: standup-bot
    port: 8080
    tools:
    - name: generate-standup
      description: Generate a team standup summary from Jira in-progress issues and recent Bitbucket commits, and post to Slack.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: workspace
        in: body
        type: string
        description: Bitbucket workspace.
      - name: repo_slug
        in: body
        type: string
        description: Bitbucket repository slug.
      - name: slack_channel
        in: body
        type: string
        description: Team Slack channel.
      steps:
      - name: get-in-progress
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND status = 'In Progress'
          maxResults: '50'
      - name: get-recent-commits
        type: call
        call: bitbucket.list-commits
        with:
          workspace: '{{workspace}}'
          repo_slug: '{{repo_slug}}'
      - name: post-standup
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Daily Standup Summary:

            - In Progress Issues: {{get-in-progress.total}}

            - Recent commits in {{repo_slug}}: {{get-recent-commits.values[0].message}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: commits
      path: /repositories/{{workspace}}/{{repo_slug}}/commits
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      operations:
      - name: list-commits
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → standup-summary-bot.yml

Monitors Jira Service Management for tickets approaching SLA breach, escalates in Jira, pages via Opsgenie, and alerts the support Slack channel.

naftiko: '0.5'
info:
  label: SLA Breach Alert Pipeline
  description: Monitors Jira Service Management for tickets approaching SLA breach, escalates in Jira, pages via Opsgenie, and alerts the support Slack channel.
  tags:
  - service-desk
  - sla-management
  - jira
  - opsgenie
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sla-monitoring
    port: 8080
    tools:
    - name: check-sla-breaches
      description: Query Jira for near-breach tickets, escalate, page on-call, and alert Slack.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira Service Management project key.
      - name: slack_channel
        in: body
        type: string
        description: Support Slack channel.
      steps:
      - name: find-at-risk
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND status != Done AND 'Time to resolution' < '30m'
          maxResults: '20'
      - name: page-support
        type: call
        call: opsgenie.create-alert
        with:
          message: 'SLA breach imminent: {{find-at-risk.total}} tickets at risk in {{project_key}}'
          priority: P2
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'SLA Alert: {{find-at-risk.total}} tickets approaching breach in {{project_key}}. On-call paged.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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
  - type: http
    namespace: opsgenie
    baseUri: https://api.opsgenie.com/v2
    authentication:
      type: bearer
      token: $secrets.opsgenie_api_key
    resources:
    - name: alerts
      path: /alerts
      operations:
      - name: create-alert
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sla-breach-alert-pipeline.yml

Retrieves a Jira issue by key and returns summary, status, assignee, and priority. Used by support and engineering teams to quickly check ticket state.

naftiko: '0.5'
info:
  label: Jira Issue Lookup
  description: Retrieves a Jira issue by key and returns summary, status, assignee, and priority. Used by support and engineering teams to quickly check ticket state.
  tags:
  - project-management
  - issue-tracking
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira-issues
    port: 8080
    tools:
    - name: get-issue
      description: Look up a Jira issue by key and return its summary, status, assignee, and priority.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key (e.g. PROJ-123).
      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://atlassian-corp.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

Executes a read-only analytics query. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Database Query Runner
  description: Executes a read-only analytics query. Used by Atlassian teams.
  tags:
  - software
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack
    port: 8080
    tools:
    - name: get-database_query_runner
      description: Executes a read-only analytics query. Used by Atlassian teams.
      inputParameters:
      - name: sql_query
        in: body
        type: string
        description: The sql_query to look up.
      call: slack.get-sql_query
      with:
        sql_query: '{{sql_query}}'
  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: atlassian_database_query_runne
        method: GET
Open in Framework → View in Fleet → atlassian-database-query-runner.yml

Retrieves vulnerability scan results. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Security Scan Results
  description: Retrieves vulnerability scan results. Used by Atlassian teams.
  tags:
  - software
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: servicenow
    port: 8080
    tools:
    - name: get-security_scan_results
      description: Retrieves vulnerability scan results. Used by Atlassian teams.
      inputParameters:
      - name: scan_id
        in: body
        type: string
        description: The scan_id to look up.
      call: servicenow.get-scan_id
      with:
        scan_id: '{{scan_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://atlassian.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: atlassian_security_scan_result
        method: GET
Open in Framework → View in Fleet → atlassian-security-scan-results.yml

Checks availability of an API endpoint. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian API Endpoint Status
  description: Checks availability of an API endpoint. Used by Atlassian teams.
  tags:
  - software
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: splunk
    port: 8080
    tools:
    - name: get-api_endpoint_status
      description: Checks availability of an API endpoint. Used by Atlassian teams.
      inputParameters:
      - name: endpoint_url
        in: body
        type: string
        description: The endpoint_url to look up.
      call: splunk.get-endpoint_url
      with:
        endpoint_url: '{{endpoint_url}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://atlassian-splunk.com/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: atlassian_api_endpoint_status
        method: GET
Open in Framework → View in Fleet → atlassian-api-endpoint-status.yml

Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.

naftiko: '0.5'
info:
  label: Knowledge Base Freshness Pipeline
  description: Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.
  tags:
  - knowledge
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: knowledge_base_freshness_pipeline
      description: Orchestrate knowledge base freshness pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-confluence
        type: call
        call: confluence.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-jira
        type: call
        call: jira.process-resource
        with:
          data: '{{get-confluence.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Knowledge Base Freshness Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://atlassian.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-op
        method: POST
  - type: http
    namespace: jira
    baseUri: https://atlassian.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 → knowledge-base-freshness-pipeline.yml

Lists all active sprints for a given Jira board and returns sprint names, start dates, and end dates. Used by scrum masters to monitor iteration progress.

naftiko: '0.5'
info:
  label: Jira Sprint Board Status
  description: Lists all active sprints for a given Jira board and returns sprint names, start dates, and end dates. Used by scrum masters to monitor iteration progress.
  tags:
  - project-management
  - agile
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira-agile
    port: 8080
    tools:
    - name: list-active-sprints
      description: List all active sprints for a Jira Agile board by board ID.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira Agile board ID.
      call: jira-agile.get-sprints
      with:
        board_id: '{{board_id}}'
      outputParameters:
      - name: sprints
        type: string
        mapping: $.values
  consumes:
  - type: http
    namespace: jira-agile
    baseUri: https://atlassian-corp.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: board-sprints
      path: /board/{{board_id}}/sprint
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-sprints
        method: GET
Open in Framework → View in Fleet → jira-sprint-board-status.yml

Triggers a Bitbucket Pipeline build, waits for SonarQube quality gate results, and posts the combined status to Jira and Slack.

naftiko: '0.5'
info:
  label: CI/CD Pipeline with Quality Gate
  description: Triggers a Bitbucket Pipeline build, waits for SonarQube quality gate results, and posts the combined status to Jira and Slack.
  tags:
  - ci-cd
  - code-quality
  - bitbucket
  - sonarqube
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cicd-quality
    port: 8080
    tools:
    - name: run-pipeline-with-gate
      description: Trigger a Bitbucket Pipeline, check SonarQube quality gate, and report status to Jira and Slack.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: Bitbucket workspace slug.
      - name: repo_slug
        in: body
        type: string
        description: Repository slug.
      - name: branch
        in: body
        type: string
        description: Branch to build.
      - name: sonar_project_key
        in: body
        type: string
        description: SonarQube project key.
      - name: issue_key
        in: body
        type: string
        description: Associated Jira issue key.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for build notifications.
      steps:
      - name: trigger-pipeline
        type: call
        call: bitbucket.trigger-pipeline
        with:
          workspace: '{{workspace}}'
          repo_slug: '{{repo_slug}}'
          target:
            ref_type: branch
            ref_name: '{{branch}}'
      - name: check-quality-gate
        type: call
        call: sonarqube.get-quality-gate
        with:
          project_key: '{{sonar_project_key}}'
      - name: comment-on-jira
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{issue_key}}'
          body: 'Build triggered for {{branch}}. Pipeline: {{trigger-pipeline.uuid}}. SonarQube gate: {{check-quality-gate.projectStatus.status}}.'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Build for {{repo_slug}}/{{branch}}: Pipeline {{trigger-pipeline.uuid}}. Quality gate: {{check-quality-gate.projectStatus.status}}. Jira: {{issue_key}}.'
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: pipelines
      path: /repositories/{{workspace}}/{{repo_slug}}/pipelines/
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      operations:
      - name: trigger-pipeline
        method: POST
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.atlassian-corp.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gate
      path: /qualitygates/project_status
      inputParameters:
      - name: project_key
        in: query
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-with-quality-gate.yml

Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.

naftiko: '0.5'
info:
  label: Training Compliance Tracker Pipeline
  description: Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.
  tags:
  - compliance
  - workday
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: training_compliance_tracker_pipeline
      description: Orchestrate training compliance tracker pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-jira
        type: call
        call: jira.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-jira.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Training Compliance Tracker Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian.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: servicenow
    baseUri: https://atlassian.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 → training-compliance-tracker-pipeline.yml

Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.

naftiko: '0.5'
info:
  label: Third-Party Integration Health Pipeline
  description: Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.
  tags:
  - integrations
  - datadog
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: integrations
    port: 8080
    tools:
    - name: third_party_integration_health_pipeline
      description: Orchestrate third-party integration health 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-servicenow
        type: call
        call: servicenow.process-resource
        with:
          data: '{{get-datadog.result}}'
      - name: create-slack
        type: call
        call: slack.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Third-Party Integration Health Pipeline step 3 complete.
  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: servicenow
    baseUri: https://atlassian.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 → third-party-integration-health-pipeline.yml

Pings Jira, Confluence, Bitbucket, and Slack API health endpoints and compiles a unified status report for platform reliability monitoring.

naftiko: '0.5'
info:
  label: Cross-Service Health Check
  description: Pings Jira, Confluence, Bitbucket, and Slack API health endpoints and compiles a unified status report for platform reliability monitoring.
  tags:
  - monitoring
  - platform-health
  - jira
  - confluence
  - bitbucket
  - slack
capability:
  exposes:
  - type: mcp
    namespace: platform-health
    port: 8080
    tools:
    - name: check-platform-health
      description: Check health status of Jira, Confluence, Bitbucket, and Slack APIs.
      inputParameters: []
      steps:
      - name: check-jira
        type: call
        call: jira.server-info
        with: {}
      - name: check-confluence
        type: call
        call: confluence.health
        with: {}
      - name: check-bitbucket
        type: call
        call: bitbucket.user
        with: {}
      - name: check-slack
        type: call
        call: slack.auth-test
        with: {}
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: server-info
      path: /serverInfo
      operations:
      - name: server-info
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://atlassian-corp.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: health
      path: /spaces?limit=1
      operations:
      - name: health
        method: GET
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: user
      path: /user
      operations:
      - name: user
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: auth
      path: /auth.test
      operations:
      - name: auth-test
        method: POST
Open in Framework → View in Fleet → cross-service-health-check.yml

Posts a message to a specified Slack channel. Used by automation workflows to broadcast notifications, alerts, and status updates.

naftiko: '0.5'
info:
  label: Slack Channel Message Sender
  description: Posts a message to a specified Slack channel. Used by automation workflows to broadcast notifications, alerts, and status updates.
  tags:
  - communications
  - notifications
  - slack
capability:
  exposes:
  - type: mcp
    namespace: slack-messaging
    port: 8080
    tools:
    - name: send-channel-message
      description: Post a text message to a Slack channel by channel ID.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Slack channel ID.
      - name: message_text
        in: body
        type: string
        description: The message text to post.
      call: slack.post-message
      with:
        channel: '{{channel_id}}'
        text: '{{message_text}}'
  consumes:
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → slack-channel-message-sender.yml

Retrieves a document from knowledge management. Used by Atlassian teams.

naftiko: '0.5'
info:
  label: Atlassian Document Retrieval
  description: Retrieves a document from knowledge management. Used by Atlassian teams.
  tags:
  - software
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: elasticsearc
    port: 8080
    tools:
    - name: get-document_retrieval
      description: Retrieves a document from knowledge management. Used by Atlassian teams.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The document_id to look up.
      call: elasticsearch.get-document_id
      with:
        document_id: '{{document_id}}'
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://atlassian-es.com:9200
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: atlassian_document_retrieval
        method: GET
Open in Framework → View in Fleet → atlassian-document-retrieval.yml

Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports.

naftiko: '0.5'
info:
  label: Capacity Planning Forecast Pipeline
  description: Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports.
  tags:
  - infrastructure
  - grafana
  - snowflake
  - powerbi
capability:
  exposes:
  - type: mcp
    namespace: infrastructure
    port: 8080
    tools:
    - name: capacity_planning_forecast_pipeline
      description: Orchestrate capacity planning forecast pipeline workflow.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Primary resource identifier.
      steps:
      - name: get-grafana
        type: call
        call: grafana.get-resource
        with:
          resource_id: '{{resource_id}}'
      - name: process-snowflake
        type: call
        call: snowflake.process-resource
        with:
          data: '{{get-grafana.result}}'
      - name: create-powerbi
        type: call
        call: powerbi.create-resource
        with:
          channel: '{{notification_channel}}'
          text: Capacity Planning Forecast Pipeline step 3 complete.
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://atlassian-grafana.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_api_key
    resources:
    - name: resources
      path: /resources/{{resource_id}}
      operations:
      - name: grafana-op
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://atlassian.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: 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: powerbi-op
        method: POST
Open in Framework → View in Fleet → capacity-planning-forecast-pipeline.yml

Executes a JQL query against Jira and returns matching issues. Used by teams to build custom dashboards and reporting workflows.

naftiko: '0.5'
info:
  label: Jira JQL Search
  description: Executes a JQL query against Jira and returns matching issues. Used by teams to build custom dashboards and reporting workflows.
  tags:
  - project-management
  - search
  - jira
capability:
  exposes:
  - type: mcp
    namespace: jira-search
    port: 8080
    tools:
    - name: search-issues
      description: Run a JQL query and return matching Jira issues.
      inputParameters:
      - name: jql
        in: body
        type: string
        description: The JQL query string.
      - name: max_results
        in: body
        type: string
        description: Maximum number of results to return (default 50).
      call: jira.search-issues
      with:
        jql: '{{jql}}'
        maxResults: '{{max_results}}'
      outputParameters:
      - name: total
        type: string
        mapping: $.total
      - name: issues
        type: string
        mapping: $.issues
  consumes:
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.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-jql-search.yml

Triggers a Jenkins pipeline build for a branch, updates the associated Jira issue with build status, and posts results to Slack.

naftiko: '0.5'
info:
  label: Jenkins Pipeline Trigger with Jira Update
  description: Triggers a Jenkins pipeline build for a branch, updates the associated Jira issue with build status, and posts results to Slack.
  tags:
  - ci-cd
  - continuous-integration
  - jenkins
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: jenkins-ci
    port: 8080
    tools:
    - name: trigger-build-and-report
      description: Trigger a Jenkins build, update Jira with results, and notify Slack.
      inputParameters:
      - name: job_name
        in: body
        type: string
        description: Jenkins job name.
      - name: branch
        in: body
        type: string
        description: Branch to build.
      - name: issue_key
        in: body
        type: string
        description: Associated Jira issue key.
      - name: slack_channel
        in: body
        type: string
        description: Build notification Slack channel.
      steps:
      - name: trigger-build
        type: call
        call: jenkins.trigger-build
        with:
          job_name: '{{job_name}}'
          branch: '{{branch}}'
      - name: comment-jira
        type: call
        call: jira.add-comment
        with:
          issue_key: '{{issue_key}}'
          body: 'Jenkins build triggered for {{job_name}}/{{branch}}. Build #{{trigger-build.nextBuildNumber}}.'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Build triggered: {{job_name}}/{{branch}} (#{{trigger-build.nextBuildNumber}}) for {{issue_key}}.'
  consumes:
  - type: http
    namespace: jenkins
    baseUri: https://jenkins.atlassian-corp.com
    authentication:
      type: basic
      username: $secrets.jenkins_user
      password: $secrets.jenkins_api_token
    resources:
    - name: builds
      path: /job/{{job_name}}/buildWithParameters
      inputParameters:
      - name: job_name
        in: path
      - name: branch
        in: query
      operations:
      - name: trigger-build
        method: POST
  - type: http
    namespace: jira
    baseUri: https://atlassian-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: comments
      path: /issue/{{issue_key}}/comment
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-comment
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jenkins-pipeline-trigger-with-jira-update.yml

Lists merged Bitbucket branches, deletes stale ones, updates the Jira issues associated with those branches, and posts a cleanup summary to Slack.

naftiko: '0.5'
info:
  label: Git Branch Cleanup Orchestrator
  description: Lists merged Bitbucket branches, deletes stale ones, updates the Jira issues associated with those branches, and posts a cleanup summary to Slack.
  tags:
  - version-control
  - devops
  - bitbucket
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: branch-cleanup
    port: 8080
    tools:
    - name: cleanup-merged-branches
      description: Delete merged branches in Bitbucket, update associated Jira issues, and notify Slack.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: Bitbucket workspace slug.
      - name: repo_slug
        in: body
        type: string
        description: Repository slug.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for cleanup reports.
      steps:
      - name: list-branches
        type: call
        call: bitbucket.list-branches
        with:
          workspace: '{{workspace}}'
          repo_slug: '{{repo_slug}}'
      - name: delete-merged
        type: call
        call: bitbucket.delete-branch
        with:
          workspace: '{{workspace}}'
          repo_slug: '{{repo_slug}}'
          branch_name: '{{list-branches.values[0].name}}'
      - name: notify-cleanup
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: Branch cleanup complete for {{workspace}}/{{repo_slug}}. Merged branches removed.
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: branches
      path: /repositories/{{workspace}}/{{repo_slug}}/refs/branches
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      operations:
      - name: list-branches
        method: GET
    - name: branch
      path: /repositories/{{workspace}}/{{repo_slug}}/refs/branches/{{branch_name}}
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      - name: branch_name
        in: path
      operations:
      - name: delete-branch
        method: DELETE
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: chat
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → git-branch-cleanup-orchestrator.yml

Retrieves distributed trace data by trace ID from an OpenTelemetry-compatible backend. Used for debugging latency and error propagation.

naftiko: '0.5'
info:
  label: OpenTelemetry Trace Lookup
  description: Retrieves distributed trace data by trace ID from an OpenTelemetry-compatible backend. Used for debugging latency and error propagation.
  tags:
  - observability
  - tracing
  - opentelemetry
capability:
  exposes:
  - type: mcp
    namespace: otel-traces
    port: 8080
    tools:
    - name: get-trace
      description: Retrieve a distributed trace by trace ID.
      inputParameters:
      - name: trace_id
        in: body
        type: string
        description: The 32-character hex trace ID.
      call: otel.get-trace
      with:
        trace_id: '{{trace_id}}'
      outputParameters:
      - name: spans
        type: string
        mapping: $.batches
  consumes:
  - type: http
    namespace: otel
    baseUri: https://tempo.atlassian-corp.com/api
    authentication:
      type: bearer
      token: $secrets.tempo_token
    resources:
    - name: traces
      path: /traces/{{trace_id}}
      inputParameters:
      - name: trace_id
        in: path
      operations:
      - name: get-trace
        method: GET
Open in Framework → View in Fleet → opentelemetry-trace-lookup.yml

Creates a new Terraform Cloud workspace for a project, links the GitHub repository, and notifies the infrastructure team via Slack.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Provisioner
  description: Creates a new Terraform Cloud workspace for a project, links the GitHub repository, and notifies the infrastructure team via Slack.
  tags:
  - cloud
  - infrastructure
  - terraform
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-terraform-workspace
      description: Given a workspace name, GitHub repository, and Terraform organization, create a Terraform Cloud workspace linked to the repository and notify the infrastructure team in Slack. Use when a new VMware Cloud, semiconductor test, or enterprise software project needs cloud infrastructure.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: The desired Terraform Cloud workspace name, e.g. 'broadcom-vcenter-prod'.
      - name: github_repo
        in: body
        type: string
        description: The GitHub repository to link, e.g. 'broadcom/vsphere-automation'.
      - name: tf_org
        in: body
        type: string
        description: The Terraform Cloud organization name.
      steps:
      - name: create-workspace
        type: call
        call: terraform.create-workspace
        with:
          name: '{{workspace_name}}'
          organization: '{{tf_org}}'
      - name: link-vcs
        type: call
        call: terraform-vcs.configure-vcs
        with:
          workspace_id: '{{create-workspace.id}}'
          repo: '{{github_repo}}'
      - name: notify-infra
        type: call
        call: slack.post-message
        with:
          channel: infrastructure
          text: 'Terraform workspace {{workspace_name}} created and linked to {{github_repo}}. ID: {{create-workspace.id}}.'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/{{organization}}/workspaces
      inputParameters:
      - name: organization
        in: path
      operations:
      - name: create-workspace
        method: POST
  - type: http
    namespace: terraform-vcs
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspace-vcs
      path: /workspaces/{{workspace_id}}/relationships/vars
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: configure-vcs
        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 → terraform-cloud-workspace-provisioner.yml

Identifies stale Confluence pages, archives them to long-term storage, and notifies page owners via Slack.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Archival Orchestrator
  description: Identifies stale Confluence pages, archives them to long-term storage, and notifies page owners via Slack.
  tags:
  - collaboration
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: kb-archival
    port: 8080
    tools:
    - name: archive-stale-pages
      description: Archive stale Confluence pages and notify owners via Slack.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: stale_days
        in: body
        type: number
        description: Days since last modification to consider stale.
      steps:
      - name: find-stale
        type: call
        call: confluence.search-content
        with:
          space_key: '{{space_key}}'
          stale_days: '{{stale_days}}'
      - name: archive-pages
        type: call
        call: confluence.archive-pages
        with:
          space_key: '{{space_key}}'
          page_ids: '{{find-stale.page_ids}}'
      - name: notify-owners
        type: call
        call: slack.post-message
        with:
          channel: '#content-ops'
          text: Archived {{find-stale.count}} stale pages in {{space_key}}
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content/search
      operations:
      - name: search-content
        method: GET
      - name: archive-pages
        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 → confluence-knowledge-base-archival-orchestrator.yml

Aggregates financial close data from SAP into Google Sheets, validates reconciliation totals, and distributes the report via email.

naftiko: '0.5'
info:
  label: Google Sheets Financial Close Orchestrator
  description: Aggregates financial close data from SAP into Google Sheets, validates reconciliation totals, and distributes the report via email.
  tags:
  - finance
  - sap
  - google-sheets
  - email
capability:
  exposes:
  - type: mcp
    namespace: financial-close
    port: 8080
    tools:
    - name: run-financial-close
      description: Aggregate SAP financial close data to Google Sheets, validate reconciliation, and email report.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period (e.g., 2026-03).
      - name: company_code
        in: body
        type: string
        description: SAP company code.
      steps:
      - name: get-close-data
        type: call
        call: sap.get-period-close
        with:
          period: '{{fiscal_period}}'
          company_code: '{{company_code}}'
      - name: update-sheet
        type: call
        call: sheets.update-spreadsheet
        with:
          spreadsheet_id: financial-close-2026
          data: '{{get-close-data.results}}'
      - name: send-report
        type: call
        call: email.send-message
        with:
          to: finance-team@broadcom.com
          subject: Financial Close Report - {{fiscal_period}}
          body: Close data published to Google Sheets.
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/FI_PERIOD_CLOSE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: period-close
      path: /A_PeriodClose
      operations:
      - name: get-period-close
        method: GET
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:batchUpdate
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: update-spreadsheet
        method: POST
  - type: http
    namespace: email
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → google-sheets-financial-close-orchestrator.yml

Validates ASIC tapeout readiness by checking DRC sign-off in Snowflake, verifying open blockers in Jira, and posting readiness summary to the design Teams channel.

naftiko: '0.5'
info:
  label: ASIC Design Tapeout Readiness Orchestrator
  description: Validates ASIC tapeout readiness by checking DRC sign-off in Snowflake, verifying open blockers in Jira, and posting readiness summary to the design Teams channel.
  tags:
  - chip-design
  - manufacturing
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: chip-engineering
    port: 8080
    tools:
    - name: check-tapeout-readiness
      description: Orchestrate ASIC tapeout readiness across Snowflake, Jira, and Teams.
      inputParameters:
      - name: design_id
        in: body
        type: string
        description: The ASIC design identifier.
      - name: jira_epic_key
        in: body
        type: string
        description: The Jira epic for tapeout sign-off.
      steps:
      - name: get-drc-status
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT design_id, drc_clean, lvs_clean FROM chip_signoff WHERE design_id = '{{design_id}}'
      - name: get-blockers
        type: call
        call: jira.search-issues
        with:
          jql: epic = {{jira_epic_key}} AND status != Done
      - name: post-summary
        type: call
        call: msteams.send-message
        with:
          channel: asic-design
          message: 'Tapeout Readiness {{design_id}}: DRC={{get-drc-status.drc_clean}}, Open blockers={{get-blockers.total}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://broadcom.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://broadcom.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
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: messages
      path: /teams/asic-design/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → asic-design-tapeout-readiness-orchestrator.yml

Checks Snowflake task execution status, validates row counts against source systems, and creates a Jira ticket for any data discrepancies.

naftiko: '0.5'
info:
  label: Snowflake ETL Pipeline Health Orchestrator
  description: Checks Snowflake task execution status, validates row counts against source systems, and creates a Jira ticket for any data discrepancies.
  tags:
  - data
  - snowflake
  - jira
capability:
  exposes:
  - type: mcp
    namespace: etl-health
    port: 8080
    tools:
    - name: check-etl-pipeline-health
      description: Check Snowflake ETL pipeline health, validate row counts, and create Jira tickets for discrepancies.
      inputParameters:
      - name: pipeline_name
        in: body
        type: string
        description: ETL pipeline name.
      steps:
      - name: get-task-status
        type: call
        call: snowflake.get-task-history
        with:
          pipeline: '{{pipeline_name}}'
      - name: validate-counts
        type: call
        call: snowflake.run-validation-query
        with:
          pipeline: '{{pipeline_name}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: DATA
          summary: ETL discrepancy in {{pipeline_name}}
          issue_type: Bug
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://broadcom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-task-history
        method: POST
      - name: run-validation-query
        method: POST
  - type: http
    namespace: jira
    baseUri: https://broadcom.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 → snowflake-etl-pipeline-health-orchestrator.yml

Queries SAP S/4HANA for budget and actuals data by cost center for a given period and posts a variance summary to the finance leadership Slack channel.

naftiko: '0.5'
info:
  label: SAP Budget vs Actuals Variance Report
  description: Queries SAP S/4HANA for budget and actuals data by cost center for a given period and posts a variance summary to the finance leadership Slack channel.
  tags:
  - finance
  - erp
  - sap
  - reporting
  - budgeting
capability:
  exposes:
  - type: mcp
    namespace: finance-reporting
    port: 8080
    tools:
    - name: publish-budget-variance
      description: Given a SAP controlling area and fiscal period, retrieve cost center actuals vs. budget and post a variance summary to the finance Slack channel. Use monthly for budget reviews.
      inputParameters:
      - name: controlling_area
        in: body
        type: string
        description: The SAP controlling area code.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period in YYYYMM format, e.g. '202603'.
      steps:
      - name: get-actuals
        type: call
        call: sap.get-cost-center-actuals
        with:
          controlling_area: '{{controlling_area}}'
          period: '{{fiscal_period}}'
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: finance-leadership
          text: 'Budget variance for period {{fiscal_period}}: Actuals {{get-actuals.total_actual}}, Budget {{get-actuals.total_budget}}. Variance: {{get-actuals.variance_pct}}%.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/FCO_PI_CONTROLLING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: cost-center-actuals
      path: /CostCenterActualsSet
      operations:
      - name: get-cost-center-actuals
        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 → sap-budget-vs-actuals-variance-report.yml

Retrieves the approval status and total of an expense report in SAP Concur.

naftiko: '0.5'
info:
  label: SAP Concur Expense Status Lookup
  description: Retrieves the approval status and total of an expense report in SAP Concur.
  tags:
  - finance
  - sap-concur
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: expense
    port: 8080
    tools:
    - name: get-expense-status
      description: Look up expense report status in SAP Concur.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: The expense report ID.
      call: concur.get-expense-report
      with:
        report_id: '{{report_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.ApprovalStatusName
      - name: total
        type: number
        mapping: $.Total
  consumes:
  - type: http
    namespace: concur
    baseUri: https://us.api.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-status-lookup.yml

When a new supplier is approved for a Broadcom manufacturing or EMS partner relationship, creates their profile in SAP Ariba and notifies the supply chain team via Slack.

naftiko: '0.5'
info:
  label: SAP Ariba Supplier Onboarding
  description: When a new supplier is approved for a Broadcom manufacturing or EMS partner relationship, creates their profile in SAP Ariba and notifies the supply chain team via Slack.
  tags:
  - procurement
  - sap-ariba
  - slack
  - supplier-management
  - supply-chain
capability:
  exposes:
  - type: mcp
    namespace: procurement-ops
    port: 8080
    tools:
    - name: onboard-supplier
      description: Given a supplier name, DUNS number, and commodity code, create the supplier profile in SAP Ariba, trigger the qualification workflow, and notify the Broadcom supply chain team in Slack. Use when a new semiconductor supply chain or EMS partner is approved.
      inputParameters:
      - name: supplier_name
        in: body
        type: string
        description: The legal name of the supplier.
      - name: duns_number
        in: body
        type: string
        description: The Dun & Bradstreet DUNS number for the supplier.
      - name: commodity_code
        in: body
        type: string
        description: The commodity code for supplier classification.
      steps:
      - name: create-supplier
        type: call
        call: ariba.create-supplier
        with:
          name: '{{supplier_name}}'
          duns: '{{duns_number}}'
          commodity: '{{commodity_code}}'
      - name: trigger-qualification
        type: call
        call: ariba-qual.trigger-survey
        with:
          supplier_id: '{{create-supplier.id}}'
      - name: notify-supply-chain
        type: call
        call: slack.post-message
        with:
          channel: supply-chain-ops
          text: 'Supplier {{supplier_name}} onboarded in Ariba (ID: {{create-supplier.id}}). Qualification survey triggered.'
  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: ariba-qual
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: qualification-surveys
      path: /suppliers/{{supplier_id}}/qualificationSurveys
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: trigger-survey
        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 → sap-ariba-supplier-onboarding.yml

Tracks post-acquisition integration milestones in Jira, syncs progress to SAP project system, and distributes weekly status reports via Confluence.

naftiko: '0.5'
info:
  label: Acquisition Integration Checklist Orchestrator
  description: Tracks post-acquisition integration milestones in Jira, syncs progress to SAP project system, and distributes weekly status reports via Confluence.
  tags:
  - operations
  - jira
  - sap
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: acquisition-integration
    port: 8080
    tools:
    - name: track-integration-milestones
      description: Track acquisition integration milestones across Jira, SAP, and Confluence.
      inputParameters:
      - name: acquisition_name
        in: body
        type: string
        description: Name of the acquired company.
      - name: week_number
        in: body
        type: number
        description: Integration week number.
      steps:
      - name: get-milestones
        type: call
        call: jira.search-issues
        with:
          jql: project=ACQ AND labels={{acquisition_name}}
      - name: sync-sap
        type: call
        call: sap.update-project-status
        with:
          project: '{{acquisition_name}}'
          week: '{{week_number}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: ACQ
          title: '{{acquisition_name}} Integration Week {{week_number}} Status'
          body: 'Milestones: {{get-milestones.total}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://broadcom.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: GET
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/PS_PROJECT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: projects
      path: /A_Project
      operations:
      - name: update-project-status
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → acquisition-integration-checklist-orchestrator.yml

When wafer inspection detects defects above threshold, logs details in SAP quality module, creates a Jira defect ticket, and notifies fab managers via Slack.

naftiko: '0.5'
info:
  label: Silicon Wafer Defect Escalation Orchestrator
  description: When wafer inspection detects defects above threshold, logs details in SAP quality module, creates a Jira defect ticket, and notifies fab managers via Slack.
  tags:
  - manufacturing
  - sap
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: wafer-quality
    port: 8080
    tools:
    - name: escalate-wafer-defect
      description: Escalate wafer defect by logging in SAP, opening a Jira ticket, and alerting fab managers.
      inputParameters:
      - name: wafer_lot_id
        in: body
        type: string
        description: Wafer lot identifier.
      - name: defect_count
        in: body
        type: number
        description: Number of defects detected.
      steps:
      - name: log-quality
        type: call
        call: sap.create-quality-notification
        with:
          lot_id: '{{wafer_lot_id}}'
          defect_count: '{{defect_count}}'
      - name: create-defect
        type: call
        call: jira.create-issue
        with:
          project: FAB
          summary: Wafer defect escalation for lot {{wafer_lot_id}}
          description: 'Defect count: {{defect_count}}'
      - name: alert-managers
        type: call
        call: slack.post-message
        with:
          channel: '#fab-alerts'
          text: 'Wafer lot {{wafer_lot_id}} has {{defect_count}} defects. Jira: {{create-defect.key}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-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: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → silicon-wafer-defect-escalation-orchestrator.yml

Lists users assigned to a specific Okta application.

naftiko: '0.5'
info:
  label: Okta Application Assignment Lookup
  description: Lists users assigned to a specific Okta application.
  tags:
  - identity
  - okta
capability:
  exposes:
  - type: mcp
    namespace: iam-apps
    port: 8080
    tools:
    - name: get-app-assignments
      description: Look up users assigned to an Okta application by app ID.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: Okta application ID.
      call: okta.get-app-users
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: user_count
        type: number
        mapping: $.length
      - name: users
        type: string
        mapping: $
  consumes:
  - type: http
    namespace: okta
    baseUri: https://broadcom.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: app-users
      path: /apps/{{app_id}}/users
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-users
        method: GET
Open in Framework → View in Fleet → okta-application-assignment-lookup.yml

Retrieves account details from Salesforce including name, industry, and annual revenue.

naftiko: '0.5'
info:
  label: Salesforce Account Details Lookup
  description: Retrieves account details from Salesforce including name, industry, and annual revenue.
  tags:
  - sales
  - salesforce
  - crm
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-account-details
      description: Look up a Salesforce account by ID.
      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: number
        mapping: $.AnnualRevenue
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.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-details-lookup.yml

Returns the total number of pages in a Confluence space.

naftiko: '0.5'
info:
  label: Confluence Space Page Count Lookup
  description: Returns the total number of pages in a Confluence space.
  tags:
  - collaboration
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: wiki-info
    port: 8080
    tools:
    - name: get-space-page-count
      description: Look up total page count for a Confluence space by space key.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      call: confluence.get-space-content
      with:
        space_key: '{{space_key}}'
      outputParameters:
      - name: page_count
        type: number
        mapping: $.size
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /space/{{space_key}}/content/page
      inputParameters:
      - name: space_key
        in: path
      operations:
      - name: get-space-content
        method: GET
Open in Framework → View in Fleet → confluence-space-page-count-lookup.yml

Triggers a Power BI dataset refresh, validates data completeness from Snowflake, and sends a dashboard-ready notification to executives via email.

naftiko: '0.5'
info:
  label: Power BI Executive Dashboard Refresh Orchestrator
  description: Triggers a Power BI dataset refresh, validates data completeness from Snowflake, and sends a dashboard-ready notification to executives via email.
  tags:
  - analytics
  - power-bi
  - snowflake
  - email
capability:
  exposes:
  - type: mcp
    namespace: exec-dashboard
    port: 8080
    tools:
    - name: refresh-executive-dashboard
      description: Refresh Power BI executive dashboard, validate Snowflake data, and notify executives.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      steps:
      - name: refresh-dataset
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
      - name: validate-data
        type: call
        call: snowflake.run-validation
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-execs
        type: call
        call: email.send-message
        with:
          to: executives@broadcom.com
          subject: Executive Dashboard Updated
          body: 'Dashboard refreshed. Data validation: {{validate-data.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
  - type: http
    namespace: snowflake
    baseUri: https://broadcom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: run-validation
        method: POST
  - type: http
    namespace: email
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → power-bi-executive-dashboard-refresh-orchestrator.yml

When a security incident is detected, collects logs from Splunk, captures affected host snapshots from VMware, and creates a forensics case in ServiceNow.

naftiko: '0.5'
info:
  label: Security Incident Forensics Orchestrator
  description: When a security incident is detected, collects logs from Splunk, captures affected host snapshots from VMware, and creates a forensics case in ServiceNow.
  tags:
  - security
  - splunk
  - vmware
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: incident-forensics
    port: 8080
    tools:
    - name: collect-forensics
      description: Collect forensic evidence by gathering Splunk logs, VMware snapshots, and creating a ServiceNow forensics case.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: Security incident identifier.
      - name: host_name
        in: body
        type: string
        description: Affected host name.
      steps:
      - name: collect-logs
        type: call
        call: splunk.export-search
        with:
          query: host={{host_name}} incident={{incident_id}}
      - name: take-snapshot
        type: call
        call: vmware.create-snapshot
        with:
          vm_name: '{{host_name}}'
          description: Forensics snapshot for incident {{incident_id}}
      - name: create-case
        type: call
        call: servicenow.create-incident
        with:
          short_description: Forensics case for incident {{incident_id}}
          category: security
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.broadcom.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs/export
      operations:
      - name: export-search
        method: POST
  - type: http
    namespace: vmware
    baseUri: https://vcenter.broadcom.com/api/vcenter
    authentication:
      type: bearer
      token: $secrets.vcenter_token
    resources:
    - name: snapshots
      path: /vm/{{vm_id}}/snapshots
      operations:
      - name: create-snapshot
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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 → security-incident-forensics-orchestrator.yml

Validates product launch readiness by checking Jira release blockers, verifying documentation in Confluence, and scheduling the launch announcement in Slack.

naftiko: '0.5'
info:
  label: Product Launch Readiness Orchestrator
  description: Validates product launch readiness by checking Jira release blockers, verifying documentation in Confluence, and scheduling the launch announcement in Slack.
  tags:
  - product
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: launch-readiness
    port: 8080
    tools:
    - name: check-launch-readiness
      description: Validate product launch readiness by checking Jira blockers, Confluence docs, and scheduling Slack announcement.
      inputParameters:
      - name: product_name
        in: body
        type: string
        description: Product name.
      - name: release_version
        in: body
        type: string
        description: Release version.
      steps:
      - name: check-blockers
        type: call
        call: jira.search-issues
        with:
          jql: project={{product_name}} AND type=Bug AND priority=Blocker AND fixVersion={{release_version}}
      - name: verify-docs
        type: call
        call: confluence.get-page
        with:
          space_key: '{{product_name}}'
          title: Release Notes {{release_version}}
      - name: schedule-announcement
        type: call
        call: slack.post-message
        with:
          channel: '#product-launches'
          text: '{{product_name}} v{{release_version}} launch readiness: {{check-blockers.total}} blockers remaining'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://broadcom.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: GET
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: get-page
        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 → product-launch-readiness-orchestrator.yml

Fetches all users assigned to a critical enterprise application in Okta, generates an access review report, and creates a ServiceNow compliance review task.

naftiko: '0.5'
info:
  label: Okta User Access Review
  description: Fetches all users assigned to a critical enterprise application in Okta, generates an access review report, and creates a ServiceNow compliance review task.
  tags:
  - identity
  - security
  - okta
  - servicenow
  - compliance
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: identity-compliance
    port: 8080
    tools:
    - name: run-access-review
      description: Given an Okta application ID and ServiceNow assignment group, list all users assigned to the application and create a ServiceNow access review task. Use for quarterly reviews of access to VMware Cloud Director, CA Clarity, and other enterprise applications.
      inputParameters:
      - name: okta_app_id
        in: body
        type: string
        description: The Okta application ID, e.g. '0oa1x2y3z4w5v6u7t8s9'.
      - name: assignment_group
        in: body
        type: string
        description: The ServiceNow group to assign the review task.
      steps:
      - name: list-app-users
        type: call
        call: okta.list-app-users
        with:
          app_id: '{{okta_app_id}}'
      - name: create-review-task
        type: call
        call: servicenow.create-incident
        with:
          category: access_review
          short_description: 'Access review: {{okta_app_id}} — {{list-app-users.count}} active users'
          assigned_group: '{{assignment_group}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://broadcom.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: app-users
      path: /apps/{{app_id}}/users
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: list-app-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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-user-access-review.yml

Given a batch of GitHub Advanced Security CVE alerts, uses Anthropic Claude to assess exploitability and business impact, and routes findings to the appropriate Jira security queues.

naftiko: '0.5'
info:
  label: AI-Assisted Security Vulnerability Triage
  description: Given a batch of GitHub Advanced Security CVE alerts, uses Anthropic Claude to assess exploitability and business impact, and routes findings to the appropriate Jira security queues.
  tags:
  - ai
  - automation
  - anthropic
  - security
  - github
  - jira
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: ai-security
    port: 8080
    tools:
    - name: triage-vulnerabilities
      description: Given a list of CVE IDs and affected Broadcom repositories, use Anthropic Claude to assess severity context and exploitability, then create Jira security tickets with triage reasoning. Use for batch CVE assessment across semiconductor, VMware, and CA software repositories.
      inputParameters:
      - name: cve_ids
        in: body
        type: string
        description: Comma-separated list of CVE IDs to triage.
      - name: product_line
        in: body
        type: string
        description: The Broadcom product line affected, e.g. 'VMware', 'CA Software', 'Semiconductor'.
      steps:
      - name: assess-cves
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          max_tokens: 2048
          system: You are a security triage specialist for an enterprise software and semiconductor company. Assess CVE exploitability, business impact, and recommended remediation priority.
          content: 'Assess the following CVEs for {{product_line}}: {{cve_ids}}. For each, provide: exploitability rating, business impact, and remediation priority.'
      - name: create-sec-tickets
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'CVE triage batch: {{product_line}} — {{cve_ids}}'
          description: 'Product Line: {{product_line}}

            CVEs: {{cve_ids}}

            AI Assessment: {{assess-cves.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: jira
    baseUri: https://broadcom.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 → ai-assisted-security-vulnerability-triage.yml

When a new Salesforce lead is created from a trade show or enterprise event, enriches the record with firmographic data from ZoomInfo and assigns it to the correct field sales representative.

naftiko: '0.5'
info:
  label: Salesforce New Lead Enrichment
  description: When a new Salesforce lead is created from a trade show or enterprise event, enriches the record with firmographic data from ZoomInfo and assigns it to the correct field sales representative.
  tags:
  - crm
  - sales
  - salesforce
  - zoominfo
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: lead-enrichment
    port: 8080
    tools:
    - name: enrich-new-lead
      description: Given a Salesforce lead ID, retrieve the lead, look up company firmographics from ZoomInfo, update the Salesforce lead with enriched data, and assign to the correct enterprise sales representative. Use for leads from VMware Explore, RSA, or other enterprise events.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce Lead ID (18-character).
      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:
          name: '{{get-lead.Company}}'
          domain: '{{get-lead.Website}}'
      - name: update-lead
        type: call
        call: salesforce-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          NumberOfEmployees: '{{enrich-company.employeeCount}}'
          AnnualRevenue: '{{enrich-company.revenue}}'
          Industry: '{{enrich-company.industry}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.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-update
    baseUri: https://broadcom.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead-update
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
Open in Framework → View in Fleet → salesforce-new-lead-enrichment.yml

Retrieves application health status and response time from New Relic APM.

naftiko: '0.5'
info:
  label: New Relic Application Health Lookup
  description: Retrieves application health status and response time from New Relic APM.
  tags:
  - observability
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: apm-health
    port: 8080
    tools:
    - name: get-app-health
      description: Look up New Relic application health by app ID.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The New Relic application ID.
      call: newrelic.get-application
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: health_status
        type: string
        mapping: $.application.health_status
      - name: response_time
        type: number
        mapping: $.application.application_summary.response_time
  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: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-application
        method: GET
Open in Framework → View in Fleet → new-relic-application-health-lookup.yml

Retrieves the title and body content of a Confluence page by page ID.

naftiko: '0.5'
info:
  label: Confluence Page Content Lookup
  description: Retrieves the title and body content of a Confluence page by page ID.
  tags:
  - documentation
  - confluence
  - knowledge-management
capability:
  exposes:
  - type: mcp
    namespace: docs
    port: 8080
    tools:
    - name: get-page-content
      description: Retrieve a Confluence page by ID.
      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
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content/{{page_id}}?expand=body.storage
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-page-content-lookup.yml

On a new pull request in GitHub, triggers a security scan and posts results back as a PR review comment to enforce secure coding practices across semiconductor and infrastructure software codebases.

naftiko: '0.5'
info:
  label: GitHub Pull Request Security Scan Gate
  description: On a new pull request in GitHub, triggers a security scan and posts results back as a PR review comment to enforce secure coding practices across semiconductor and infrastructure software codebases.
  tags:
  - devops
  - security
  - github
  - code-quality
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-scanning
    port: 8080
    tools:
    - name: scan-pull-request
      description: Given a GitHub repository and pull request number, retrieve PR details, post a security review placeholder, and request review from the security team. Use when a PR targets main, release, or firmware branches.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. 'broadcom/linux-kernel-patches'.
      - name: pr_number
        in: body
        type: integer
        description: The GitHub pull request number.
      - name: commit_sha
        in: body
        type: string
        description: The HEAD commit SHA of the pull request.
      steps:
      - name: get-pr
        type: call
        call: github.get-pull-request
        with:
          repo: '{{repo}}'
          pull_number: '{{pr_number}}'
      - name: post-review
        type: call
        call: github-review.create-pr-review
        with:
          repo: '{{repo}}'
          pull_number: '{{pr_number}}'
          commit_id: '{{commit_sha}}'
          body: 'Security review triggered for PR #{{pr_number}} in {{repo}}. Scanning {{get-pr.changed_files}} files.'
          event: COMMENT
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{repo}}/pulls/{{pull_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
  - type: http
    namespace: github-review
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pr-reviews
      path: /repos/{{repo}}/pulls/{{pull_number}}/reviews
      inputParameters:
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: create-pr-review
        method: POST
Open in Framework → View in Fleet → github-pull-request-security-scan-gate.yml

Fetches Salesforce opportunities with upcoming renewal dates for VMware and CA enterprise customers, and posts a renewal digest to the account team Slack channel.

naftiko: '0.5'
info:
  label: Salesforce Customer Renewal Opportunity Tracker
  description: Fetches Salesforce opportunities with upcoming renewal dates for VMware and CA enterprise customers, and posts a renewal digest to the account team Slack channel.
  tags:
  - crm
  - sales
  - salesforce
  - slack
  - account-management
  - renewal
capability:
  exposes:
  - type: mcp
    namespace: crm-reporting
    port: 8080
    tools:
    - name: digest-renewal-opportunities
      description: Given a Salesforce territory and number of days to look ahead, fetch all opportunities with renewal dates within that window, and post a renewal digest to the account team Slack channel. Use weekly for enterprise renewal pipeline management.
      inputParameters:
      - name: territory
        in: body
        type: string
        description: The Salesforce territory or region filter, e.g. 'AMER-Enterprise'.
      - name: days_ahead
        in: body
        type: integer
        description: Number of days ahead to look for upcoming renewals.
      steps:
      - name: get-renewals
        type: call
        call: salesforce.search-renewal-opps
        with:
          territory: '{{territory}}'
          days_ahead: '{{days_ahead}}'
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: sales-renewals
          text: 'Renewal digest for {{territory}}: {{get-renewals.count}} opportunities renewing in the next {{days_ahead}} days. Total value: ${{get-renewals.total_value}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: search-renewal-opps
        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 → salesforce-customer-renewal-opportunity-tracker.yml

Retrieves the latest build status for an Azure DevOps pipeline.

naftiko: '0.5'
info:
  label: Azure DevOps Build Status Lookup
  description: Retrieves the latest build status for an Azure DevOps pipeline.
  tags:
  - cicd
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: devops-builds
    port: 8080
    tools:
    - name: get-build-status
      description: Look up latest build status for an Azure DevOps pipeline definition.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: Azure DevOps pipeline definition ID.
      call: azdo.get-build
      with:
        definition_id: '{{pipeline_id}}'
      outputParameters:
      - name: build_status
        type: string
        mapping: $.value[0].status
      - name: build_result
        type: string
        mapping: $.value[0].result
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/broadcom
    authentication:
      type: bearer
      token: $secrets.azdo_token
    resources:
    - name: builds
      path: /_apis/build/builds?definitions={{definition_id}}&$top=1
      inputParameters:
      - name: definition_id
        in: query
      operations:
      - name: get-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-status-lookup.yml

Notifies customers of product EOL by pulling affected accounts from Salesforce, updating SAP material status, and alerting sales via Teams.

naftiko: '0.5'
info:
  label: Product End-of-Life Notification Orchestrator
  description: Notifies customers of product EOL by pulling affected accounts from Salesforce, updating SAP material status, and alerting sales via Teams.
  tags:
  - product-lifecycle
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-lifecycle
    port: 8080
    tools:
    - name: process-eol
      description: Orchestrate product EOL notification across Salesforce, SAP, and Teams.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The product ID being discontinued.
      steps:
      - name: get-accounts
        type: call
        call: salesforce.query
        with:
          soql: SELECT Name FROM Account WHERE Product__c = '{{product_id}}'
      - name: update-sap
        type: call
        call: sap.update-material
        with:
          material: '{{product_id}}'
          status: EOL
      - name: notify-sales
        type: call
        call: msteams.send-message
        with:
          channel: sales
          message: 'EOL: {{product_id}}. Affected accounts: {{get-accounts.totalSize}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      operations:
      - name: query
        method: GET
  - type: http
    namespace: sap
    baseUri: https://broadcom-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: update-material
        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/sales/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → product-end-of-life-notification-orchestrator.yml

Checks the execution status and row count of a Snowflake query by statement handle.

naftiko: '0.5'
info:
  label: Snowflake Query Execution Status Lookup
  description: Checks the execution status and row count of a Snowflake query by statement handle.
  tags:
  - data
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-warehouse
    port: 8080
    tools:
    - name: get-query-status
      description: Look up Snowflake query execution status by statement handle.
      inputParameters:
      - name: statement_handle
        in: body
        type: string
        description: Snowflake SQL statement handle.
      call: snowflake.get-statement
      with:
        handle: '{{statement_handle}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.statementStatusUrl
      - name: row_count
        type: number
        mapping: $.resultSetMetaData.numRows
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://broadcom.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements/{{handle}}
      inputParameters:
      - name: handle
        in: path
      operations:
      - name: get-statement
        method: GET
Open in Framework → View in Fleet → snowflake-query-execution-status-lookup.yml

Updates a Salesforce enterprise software opportunity to the next stage and notifies the account team via Slack when a deal milestone is confirmed.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Stage Advancement
  description: Updates a Salesforce enterprise software opportunity to the next stage and notifies the account team via Slack when a deal milestone is confirmed.
  tags:
  - crm
  - sales
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: crm-ops
    port: 8080
    tools:
    - name: advance-opportunity-stage
      description: Given a Salesforce opportunity ID and new stage name, update the opportunity and post a Slack notification to the sales team. Use when a VMware, CA, or semiconductor customer deal progresses to a new stage.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce Opportunity ID (18-character).
      - name: new_stage
        in: body
        type: string
        description: The new pipeline stage, e.g. 'Proposal/Price Quote', 'Negotiation/Review', 'Closed Won'.
      steps:
      - name: update-opp
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          StageName: '{{new_stage}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: sales-wins
          text: 'Opportunity {{opportunity_id}} advanced to: {{new_stage}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.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: 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 → salesforce-opportunity-stage-advancement.yml

Tracks wafer yield by querying SAP production data, pulling yield analytics from Snowflake, and updating ServiceNow CMDB records.

naftiko: '0.5'
info:
  label: Semiconductor Wafer Yield Tracking Orchestrator
  description: Tracks wafer yield by querying SAP production data, pulling yield analytics from Snowflake, and updating ServiceNow CMDB records.
  tags:
  - manufacturing
  - sap
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: fab-ops
    port: 8080
    tools:
    - name: track-wafer-yield
      description: Orchestrate wafer yield tracking across SAP, Snowflake, and ServiceNow.
      inputParameters:
      - name: lot_id
        in: body
        type: string
        description: The wafer lot identifier.
      steps:
      - name: get-production-data
        type: call
        call: sap.get-production-order
        with:
          lot_id: '{{lot_id}}'
      - name: get-yield-analytics
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT yield_pct, defect_count FROM fab_yield WHERE lot_id = '{{lot_id}}'
      - name: update-cmdb
        type: call
        call: servicenow.update-ci
        with:
          ci_name: LOT-{{lot_id}}
          yield: '{{get-yield-analytics.yield_pct}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder
      operations:
      - name: get-production-order
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://broadcom.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://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci
      operations:
      - name: update-ci
        method: PATCH
Open in Framework → View in Fleet → semiconductor-wafer-yield-tracking-orchestrator.yml

Retrieves contract status and expiration date from SAP Ariba.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Status Lookup
  description: Retrieves contract status and expiration date from SAP Ariba.
  tags:
  - procurement
  - sap
  - contract-management
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-contract-status
      description: Look up a contract in SAP Ariba.
      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: expiration_date
        type: string
        mapping: $.ExpirationDate
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract-compliance/v1
    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
Open in Framework → View in Fleet → sap-ariba-contract-status-lookup.yml

Retrieves cloud recording details for a Zoom meeting.

naftiko: '0.5'
info:
  label: Zoom Meeting Recording Lookup
  description: Retrieves cloud recording details for a Zoom meeting.
  tags:
  - collaboration
  - zoom
  - meetings
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: get-meeting-recordings
      description: Look up cloud recordings for a Zoom meeting.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting ID.
      call: zoom.get-recordings
      with:
        meeting_id: '{{meeting_id}}'
      outputParameters:
      - name: recording_count
        type: number
        mapping: $.recording_count
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: recordings
      path: /meetings/{{meeting_id}}/recordings
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-recordings
        method: GET
Open in Framework → View in Fleet → zoom-meeting-recording-lookup.yml

Discovers installed software via ServiceNow Discovery, reconciles against license entitlements, and creates remediation tasks in Jira.

naftiko: '0.5'
info:
  label: ITAM Software Discovery Orchestrator
  description: Discovers installed software via ServiceNow Discovery, reconciles against license entitlements, and creates remediation tasks in Jira.
  tags:
  - compliance
  - servicenow
  - jira
capability:
  exposes:
  - type: mcp
    namespace: itam-discovery
    port: 8080
    tools:
    - name: discover-and-reconcile-software
      description: Discover installed software, reconcile licenses, and create Jira remediation tasks.
      inputParameters:
      - name: ci_class
        in: body
        type: string
        description: ServiceNow CI class name.
      steps:
      - name: get-installed-software
        type: call
        call: servicenow.get-discovery-results
        with:
          ci_class: '{{ci_class}}'
      - name: reconcile-licenses
        type: call
        call: servicenow.get-license-compliance
        with:
          ci_class: '{{ci_class}}'
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project: ITAM
          summary: License compliance remediation for {{ci_class}}
          issue_type: Task
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: discovery
      path: /table/cmdb_ci_software
      operations:
      - name: get-discovery-results
        method: GET
      - name: get-license-compliance
        method: GET
  - type: http
    namespace: jira
    baseUri: https://broadcom.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 → itam-software-discovery-orchestrator.yml

Retrieves the current state version and resource count for a Terraform Cloud workspace.

naftiko: '0.5'
info:
  label: Terraform Workspace State Lookup
  description: Retrieves the current state version and resource count for a Terraform Cloud workspace.
  tags:
  - infrastructure
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: iac-state
    port: 8080
    tools:
    - name: get-workspace-state
      description: Look up Terraform Cloud workspace state by workspace ID.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID.
      call: terraform.get-state
      with:
        workspace_id: '{{workspace_id}}'
      outputParameters:
      - name: state_version
        type: string
        mapping: $.data.attributes.serial
      - name: resource_count
        type: number
        mapping: $.data.attributes.resource-count
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: state-versions
      path: /workspaces/{{workspace_id}}/current-state-version
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: get-state
        method: GET
Open in Framework → View in Fleet → terraform-workspace-state-lookup.yml

Queries Snowflake for the current row count of a specified analytics table.

naftiko: '0.5'
info:
  label: Snowflake Table Row Count Lookup
  description: Queries Snowflake for the current row count of a specified analytics table.
  tags:
  - data-engineering
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: get-table-row-count
      description: Execute a count query against a Snowflake table.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified Snowflake table name.
      call: snowflake.execute-query
      with:
        statement: SELECT COUNT(*) as row_count FROM {{table_name}}
      outputParameters:
      - name: row_count
        type: number
        mapping: $.data[0][0]
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://broadcom.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-table-row-count-lookup.yml

Queries Cisco DNA Center for the operational status of a network switch interface.

naftiko: '0.5'
info:
  label: Cisco Switch Interface Status Lookup
  description: Queries Cisco DNA Center for the operational status of a network switch interface.
  tags:
  - network
  - cisco
capability:
  exposes:
  - type: mcp
    namespace: network-ops
    port: 8080
    tools:
    - name: get-interface-status
      description: Look up Cisco switch interface operational status by device and interface name.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Cisco DNA Center device ID.
      - name: interface_name
        in: body
        type: string
        description: The interface name.
      call: cisco.get-interface
      with:
        device_id: '{{device_id}}'
        interface_name: '{{interface_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.response[0].status
      - name: speed
        type: string
        mapping: $.response[0].speed
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://dnac.broadcom.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_dnac_token
    resources:
    - name: interfaces
      path: /interface/network-device/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-interface
        method: GET
Open in Framework → View in Fleet → cisco-switch-interface-status-lookup.yml

Fetches engagement and follower metrics from Broadcom's LinkedIn company page for the reporting period and posts a digest to the corporate communications Slack channel.

naftiko: '0.5'
info:
  label: LinkedIn Company Page Performance Digest
  description: Fetches engagement and follower metrics from Broadcom's LinkedIn company page for the reporting period and posts a digest to the corporate communications Slack channel.
  tags:
  - marketing
  - social
  - linkedin
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: social-reporting
    port: 8080
    tools:
    - name: digest-linkedin-performance
      description: Fetch follower growth and post engagement metrics from Broadcom's LinkedIn page for a given reporting period and post a summary to the corporate communications Slack channel. Use for weekly and monthly social performance reviews.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: The start of the reporting period in ISO 8601 format.
      - name: end_date
        in: body
        type: string
        description: The end of the reporting period in ISO 8601 format.
      steps:
      - name: get-follower-stats
        type: call
        call: linkedin.get-follower-stats
        with:
          organization_id: $secrets.broadcom_linkedin_org_id
      - name: get-share-stats
        type: call
        call: linkedin-shares.get-share-stats
        with:
          organization_id: $secrets.broadcom_linkedin_org_id
          start: '{{start_date}}'
          end: '{{end_date}}'
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: corporate-communications
          text: 'LinkedIn digest ({{start_date}} to {{end_date}}): followers {{get-follower-stats.follower_count}}, impressions {{get-share-stats.impression_count}}, engagements {{get-share-stats.engagement_count}}.'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: follower-stats
      path: /organizationalEntityFollowerStatistics
      operations:
      - name: get-follower-stats
        method: GET
  - type: http
    namespace: linkedin-shares
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: share-stats
      path: /organizationalEntityShareStatistics
      operations:
      - name: get-share-stats
        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 → linkedin-company-page-performance-digest.yml

When a developer joins a product team, grants them access to the relevant GitHub repositories and sends a Slack confirmation to the team lead.

naftiko: '0.5'
info:
  label: GitHub Repository Access Provisioning
  description: When a developer joins a product team, grants them access to the relevant GitHub repositories and sends a Slack confirmation to the team lead.
  tags:
  - devops
  - identity
  - github
  - slack
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: dev-access
    port: 8080
    tools:
    - name: provision-repo-access
      description: Given a GitHub username, repository name, and permission level, add the developer as a repository collaborator and notify the team lead in Slack. Use when a new engineer joins a Broadcom product team working on VMware, CA software, or semiconductor IP.
      inputParameters:
      - name: github_username
        in: body
        type: string
        description: The GitHub username of the developer.
      - name: repo_name
        in: body
        type: string
        description: The full GitHub repository name, e.g. 'broadcom/esxi-kernel'.
      - name: permission
        in: body
        type: string
        description: 'Permission level: ''read'', ''triage'', ''write'', ''maintain'', or ''admin''.'
      - name: team_lead_slack_id
        in: body
        type: string
        description: The Slack user ID of the team lead.
      steps:
      - name: add-collaborator
        type: call
        call: github.add-repo-collaborator
        with:
          repo: '{{repo_name}}'
          username: '{{github_username}}'
          permission: '{{permission}}'
      - name: notify-lead
        type: call
        call: slack.post-dm
        with:
          channel: '{{team_lead_slack_id}}'
          text: '{{github_username}} granted {{permission}} access to {{repo_name}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: collaborators
      path: /repos/{{repo}}/collaborators/{{username}}
      inputParameters:
      - name: repo
        in: path
      - name: username
        in: path
      operations:
      - name: add-repo-collaborator
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: dm
      path: /chat.postMessage
      operations:
      - name: post-dm
        method: POST
Open in Framework → View in Fleet → github-repository-access-provisioning.yml

Queries Azure Cost Management for the month-to-date spend of a resource group.

naftiko: '0.5'
info:
  label: Azure Resource Group Cost Lookup
  description: Queries Azure Cost Management for the month-to-date spend of a resource group.
  tags:
  - cloud
  - microsoft-azure
  - finops
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost
    port: 8080
    tools:
    - name: get-resource-group-cost
      description: Retrieve month-to-date cost for an Azure resource group.
      inputParameters:
      - name: resource_group
        in: body
        type: string
        description: The Azure resource group name.
      call: azure.get-cost-summary
      with:
        resource_group: '{{resource_group}}'
      outputParameters:
      - name: mtd_cost
        type: number
        mapping: $.properties.rows[0][0]
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: cost-management
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: resource_group
        in: path
      operations:
      - name: get-cost-summary
        method: POST
Open in Framework → View in Fleet → azure-resource-group-cost-lookup.yml

Validates that all GitHub Actions checks pass, runs security scan, and promotes the build to production with a ServiceNow change request.

naftiko: '0.5'
info:
  label: GitHub Actions Deployment Gate Orchestrator
  description: Validates that all GitHub Actions checks pass, runs security scan, and promotes the build to production with a ServiceNow change request.
  tags:
  - cicd
  - github
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: deployment-gate
    port: 8080
    tools:
    - name: process-deployment-gate
      description: Validate GitHub Actions checks, run security scan, and promote to production with ServiceNow change.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository (org/repo).
      - name: commit_sha
        in: body
        type: string
        description: Git commit SHA.
      steps:
      - name: check-status
        type: call
        call: github.get-check-runs
        with:
          repo: '{{repo}}'
          sha: '{{commit_sha}}'
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: Production deployment for {{repo}} at {{commit_sha}}
          category: deployment
      - name: trigger-deploy
        type: call
        call: github.create-deployment
        with:
          repo: '{{repo}}'
          ref: '{{commit_sha}}'
          environment: production
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: check-runs
      path: /repos/{{repo}}/commits/{{sha}}/check-runs
      inputParameters:
      - name: repo
        in: path
      - name: sha
        in: path
      operations:
      - name: get-check-runs
        method: GET
      - name: create-deployment
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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 → github-actions-deployment-gate-orchestrator.yml

Retrieves current stock levels for a material number from SAP S/4HANA inventory management.

naftiko: '0.5'
info:
  label: SAP Inventory Stock Level Lookup
  description: Retrieves current stock levels for a material number from SAP S/4HANA inventory management.
  tags:
  - supply-chain
  - sap
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: inventory
    port: 8080
    tools:
    - name: get-stock-level
      description: Look up current stock for a material in SAP.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: The SAP material number.
      call: sap.get-material-stock
      with:
        material_number: '{{material_number}}'
      outputParameters:
      - name: available_qty
        type: string
        mapping: $.d.AvailableQuantity
      - name: reserved_qty
        type: string
        mapping: $.d.ReservedQuantity
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-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-inventory-stock-level-lookup.yml

Pulls software license usage from ServiceNow SAM, compares against entitlements, and generates a compliance report in Confluence.

naftiko: '0.5'
info:
  label: Quarterly License Compliance Audit Orchestrator
  description: Pulls software license usage from ServiceNow SAM, compares against entitlements, and generates a compliance report in Confluence.
  tags:
  - compliance
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: license-audit
    port: 8080
    tools:
    - name: run-license-audit
      description: Run quarterly license compliance audit by pulling usage data from ServiceNow and publishing results to Confluence.
      inputParameters:
      - name: audit_quarter
        in: body
        type: string
        description: Fiscal quarter (e.g., Q1-2026).
      - name: space_key
        in: body
        type: string
        description: Confluence space key for audit reports.
      steps:
      - name: get-license-usage
        type: call
        call: servicenow.get-sam-report
        with:
          quarter: '{{audit_quarter}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          title: License Compliance Audit - {{audit_quarter}}
          body: 'Usage report: {{get-license-usage.summary}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: sam
      path: /table/sam_sw_license
      operations:
      - name: get-sam-report
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → quarterly-license-compliance-audit-orchestrator.yml

Queries Datadog APM for the p95 latency of a specified service over the last hour.

naftiko: '0.5'
info:
  label: Datadog Service Latency Lookup
  description: Queries Datadog APM for the p95 latency of a specified service over the last hour.
  tags:
  - observability
  - datadog
  - apm
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: get-service-latency
      description: Retrieve p95 latency for a service from Datadog APM.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog.query-metrics
      with:
        query: trace.http.request.duration.by.service.95p{service:{{service_name}}}
      outputParameters:
      - name: p95_latency_ms
        type: number
        mapping: $.series[0].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
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-service-latency-lookup.yml

When a Salesforce case is escalated, retrieves account details, creates a priority ServiceNow incident, and notifies the customer success team via Slack.

naftiko: '0.5'
info:
  label: Customer Escalation Response Orchestrator
  description: When a Salesforce case is escalated, retrieves account details, creates a priority ServiceNow incident, and notifies the customer success team via Slack.
  tags:
  - support
  - salesforce
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: customer-escalation
    port: 8080
    tools:
    - name: handle-escalation
      description: Handle customer escalation by pulling Salesforce case details, opening a ServiceNow P1 incident, and alerting the CS team.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce case ID.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Customer escalation: {{get-case.subject}}'
          urgency: '1'
          impact: '1'
      - name: notify-cs
        type: call
        call: slack.post-message
        with:
          channel: '#customer-success'
          text: 'Escalation for {{get-case.account_name}}: {{get-case.subject}}. ServiceNow: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.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://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → customer-escalation-response-orchestrator.yml

Retrieves compensation band details for a job profile from Workday.

naftiko: '0.5'
info:
  label: Workday Compensation Band Lookup
  description: Retrieves compensation band details for a job profile from Workday.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr-compensation
    port: 8080
    tools:
    - name: get-compensation-band
      description: Look up Workday compensation band by job profile ID.
      inputParameters:
      - name: job_profile_id
        in: body
        type: string
        description: Workday job profile ID.
      call: workday.get-comp-band
      with:
        job_profile_id: '{{job_profile_id}}'
      outputParameters:
      - name: min_salary
        type: number
        mapping: $.compensation.minimum
      - name: max_salary
        type: number
        mapping: $.compensation.maximum
  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: /broadcom/compensationBands/{{job_profile_id}}
      inputParameters:
      - name: job_profile_id
        in: path
      operations:
      - name: get-comp-band
        method: GET
Open in Framework → View in Fleet → workday-compensation-band-lookup.yml

Checks SSL certificate expiry dates, initiates renewal requests, and updates the certificate inventory in ServiceNow CMDB.

naftiko: '0.5'
info:
  label: SSL Certificate Renewal Orchestrator
  description: Checks SSL certificate expiry dates, initiates renewal requests, and updates the certificate inventory in ServiceNow CMDB.
  tags:
  - security
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cert-renewal
    port: 8080
    tools:
    - name: renew-ssl-certificates
      description: Check expiring SSL certificates, initiate renewal, and update ServiceNow CMDB.
      inputParameters:
      - name: domain
        in: body
        type: string
        description: Domain name to check.
      - name: days_before_expiry
        in: body
        type: number
        description: Days before expiry threshold.
      steps:
      - name: check-cert
        type: call
        call: cert-mgmt.check-expiry
        with:
          domain: '{{domain}}'
          threshold_days: '{{days_before_expiry}}'
      - name: request-renewal
        type: call
        call: cert-mgmt.request-renewal
        with:
          domain: '{{domain}}'
      - name: update-cmdb
        type: call
        call: servicenow.update-ci
        with:
          name: '{{domain}}'
          renewal_status: pending
  consumes:
  - type: http
    namespace: cert-mgmt
    baseUri: https://cert-manager.broadcom.com/api/v1
    authentication:
      type: bearer
      token: $secrets.cert_mgmt_token
    resources:
    - name: certificates
      path: /certificates
      operations:
      - name: check-expiry
        method: GET
      - name: request-renewal
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci_certificate
      operations:
      - name: update-ci
        method: PATCH
Open in Framework → View in Fleet → ssl-certificate-renewal-orchestrator.yml

Retrieves recent messages from a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel Message Lookup
  description: Retrieves recent messages from a Microsoft Teams channel.
  tags:
  - collaboration
  - microsoft-teams
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: messaging
    port: 8080
    tools:
    - name: get-channel-messages
      description: Retrieve last 10 messages from a 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.
      call: msteams.get-messages
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
      outputParameters:
      - name: messages
        type: array
        mapping: $.value[*].body.content
  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?$top=10
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: get-messages
        method: GET
Open in Framework → View in Fleet → microsoft-teams-channel-message-lookup.yml

When SolarWinds detects a network outage, creates a ServiceNow major incident, notifies the NOC via Slack, and initiates automated diagnostics.

naftiko: '0.5'
info:
  label: SolarWinds Network Outage Response Orchestrator
  description: When SolarWinds detects a network outage, creates a ServiceNow major incident, notifies the NOC via Slack, and initiates automated diagnostics.
  tags:
  - network
  - solarwinds
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: network-outage
    port: 8080
    tools:
    - name: respond-to-outage
      description: Respond to SolarWinds network outage by creating ServiceNow incident, alerting NOC, and running diagnostics.
      inputParameters:
      - name: node_name
        in: body
        type: string
        description: SolarWinds node name.
      - name: alert_severity
        in: body
        type: string
        description: Alert severity level.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Network outage: {{node_name}}'
          urgency: '1'
          impact: '1'
      - name: notify-noc
        type: call
        call: slack.post-message
        with:
          channel: '#noc-alerts'
          text: 'Network outage detected: {{node_name}} ({{alert_severity}}). Incident: {{create-incident.number}}'
      - name: run-diagnostics
        type: call
        call: solarwinds.run-diagnostics
        with:
          node_name: '{{node_name}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.broadcom.com/api/v2
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: diagnostics
      path: /nodes/{{node_name}}/diagnostics
      inputParameters:
      - name: node_name
        in: path
      operations:
      - name: run-diagnostics
        method: POST
Open in Framework → View in Fleet → solarwinds-network-outage-response-orchestrator.yml

Queries Splunk for recent security events matching a given search query.

naftiko: '0.5'
info:
  label: Splunk Security Event Lookup
  description: Queries Splunk for recent security events matching a given search query.
  tags:
  - security
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: security-events
    port: 8080
    tools:
    - name: search-security-events
      description: Search Splunk for security events by query string.
      inputParameters:
      - name: search_query
        in: body
        type: string
        description: Splunk search query string.
      call: splunk.search-events
      with:
        query: '{{search_query}}'
      outputParameters:
      - name: event_count
        type: number
        mapping: $.results.length
      - name: events
        type: string
        mapping: $.results
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.broadcom.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs/export
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-events
        method: GET
Open in Framework → View in Fleet → splunk-security-event-lookup.yml

Runs Looker data quality checks, exports results to Google Sheets, and alerts data stewards via Slack.

naftiko: '0.5'
info:
  label: Looker Data Quality Report Orchestrator
  description: Runs Looker data quality checks, exports results to Google Sheets, and alerts data stewards via Slack.
  tags:
  - analytics
  - looker
  - google-sheets
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-quality-report
    port: 8080
    tools:
    - name: generate-data-quality-report
      description: Run Looker data quality checks, export to Google Sheets, and notify data stewards.
      inputParameters:
      - name: look_id
        in: body
        type: string
        description: Looker Look ID for data quality dashboard.
      steps:
      - name: run-look
        type: call
        call: looker.run-look
        with:
          look_id: '{{look_id}}'
      - name: export-to-sheets
        type: call
        call: sheets.update-spreadsheet
        with:
          spreadsheet_id: dq-report-2026
          data: '{{run-look.results}}'
      - name: notify-stewards
        type: call
        call: slack.post-message
        with:
          channel: '#data-quality'
          text: 'Data quality report generated. Results: {{run-look.row_count}} issues found.'
  consumes:
  - type: http
    namespace: looker
    baseUri: https://broadcom.looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_token
    resources:
    - name: looks
      path: /looks/{{look_id}}/run/json
      inputParameters:
      - name: look_id
        in: path
      operations:
      - name: run-look
        method: GET
  - type: http
    namespace: sheets
    baseUri: https://sheets.googleapis.com/v4
    authentication:
      type: bearer
      token: $secrets.google_sheets_token
    resources:
    - name: spreadsheets
      path: /spreadsheets/{{spreadsheet_id}}/values:batchUpdate
      inputParameters:
      - name: spreadsheet_id
        in: path
      operations:
      - name: update-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 → looker-data-quality-report-orchestrator.yml

Validates chip design review checklist completion in Jira, collects sign-off from reviewers via Slack, and updates the milestone tracker in SAP.

naftiko: '0.5'
info:
  label: Chip Design Review Gate Orchestrator
  description: Validates chip design review checklist completion in Jira, collects sign-off from reviewers via Slack, and updates the milestone tracker in SAP.
  tags:
  - engineering
  - jira
  - slack
  - sap
capability:
  exposes:
  - type: mcp
    namespace: design-review
    port: 8080
    tools:
    - name: run-design-review-gate
      description: Execute chip design review gate by validating Jira checklist, collecting Slack sign-offs, and updating SAP milestone.
      inputParameters:
      - name: design_id
        in: body
        type: string
        description: Chip design project ID.
      - name: milestone
        in: body
        type: string
        description: Design milestone name.
      steps:
      - name: check-jira-tasks
        type: call
        call: jira.get-sprint-issues
        with:
          project: '{{design_id}}'
          milestone: '{{milestone}}'
      - name: request-signoff
        type: call
        call: slack.post-message
        with:
          channel: '#design-reviews'
          text: Design review gate for {{design_id}} milestone {{milestone}} - all tasks complete. Please sign off.
      - name: update-milestone
        type: call
        call: sap.update-milestone
        with:
          project_id: '{{design_id}}'
          milestone: '{{milestone}}'
          status: approved
  consumes:
  - type: http
    namespace: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      operations:
      - name: get-sprint-issues
        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
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/PS_PROJECT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: milestones
      path: /A_ProjectMilestone
      operations:
      - name: update-milestone
        method: PATCH
Open in Framework → View in Fleet → chip-design-review-gate-orchestrator.yml

Pulls current headcount from Workday, compares against hiring plan targets, and publishes a gap analysis to Confluence.

naftiko: '0.5'
info:
  label: Workday Headcount Forecast Orchestrator
  description: Pulls current headcount from Workday, compares against hiring plan targets, and publishes a gap analysis to Confluence.
  tags:
  - hr
  - workday
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: headcount-forecast
    port: 8080
    tools:
    - name: generate-headcount-forecast
      description: Generate headcount forecast by comparing Workday actuals to hiring plan and publishing to Confluence.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name.
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter.
      steps:
      - name: get-headcount
        type: call
        call: workday.get-headcount
        with:
          department: '{{department}}'
      - name: publish-analysis
        type: call
        call: confluence.create-page
        with:
          space_key: HR
          title: Headcount Forecast - {{department}} - {{fiscal_quarter}}
          body: 'Current headcount: {{get-headcount.total}}'
  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: /broadcom/headcountReport
      operations:
      - name: get-headcount
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → workday-headcount-forecast-orchestrator.yml

Validates Jira release readiness by checking unresolved issues, generating release notes in Confluence, and triggering a GitHub release.

naftiko: '0.5'
info:
  label: Jira Release Readiness Gate Orchestrator
  description: Validates Jira release readiness by checking unresolved issues, generating release notes in Confluence, and triggering a GitHub release.
  tags:
  - cicd
  - jira
  - confluence
  - github
capability:
  exposes:
  - type: mcp
    namespace: release-gate
    port: 8080
    tools:
    - name: validate-release-readiness
      description: Validate release by checking Jira issues, publishing Confluence notes, and creating a GitHub release.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: version
        in: body
        type: string
        description: Release version.
      steps:
      - name: check-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND fixVersion={{version}} AND resolution=Unresolved
      - name: create-release-notes
        type: call
        call: confluence.create-page
        with:
          space_key: '{{project_key}}'
          title: Release Notes - {{version}}
      - name: create-release
        type: call
        call: github.create-release
        with:
          tag: v{{version}}
          name: '{{project_key}} {{version}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://broadcom.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: GET
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/broadcom/{{repo}}/releases
      operations:
      - name: create-release
        method: POST
Open in Framework → View in Fleet → jira-release-readiness-gate-orchestrator.yml

When AWS Cost Explorer detects a spend anomaly for a Broadcom account, creates a Jira ticket for the cloud platform team and posts a Slack summary to the FinOps channel.

naftiko: '0.5'
info:
  label: AWS Cloud Cost Anomaly Responder
  description: When AWS Cost Explorer detects a spend anomaly for a Broadcom account, creates a Jira ticket for the cloud platform team and posts a Slack summary to the FinOps channel.
  tags:
  - cloud
  - finops
  - aws
  - jira
  - slack
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: finops-ops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS account ID, anomaly detection alert, and owning team name, create a Jira FinOps task and post a Slack alert. Use when cloud spend anomaly thresholds are exceeded for Broadcom AWS accounts running VMware Cloud or semiconductor EDA workloads.
      inputParameters:
      - name: aws_account_id
        in: body
        type: string
        description: The AWS account ID where the anomaly was detected.
      - name: anomaly_amount
        in: body
        type: number
        description: The dollar amount exceeding the expected spend baseline.
      - name: team_name
        in: body
        type: string
        description: The owning team name for Jira ticket routing.
      steps:
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: FINOPS
          issuetype: Task
          summary: 'AWS cost anomaly: account {{aws_account_id}} — ${{anomaly_amount}} overage'
          description: 'Account: {{aws_account_id}}

            Overage: ${{anomaly_amount}}

            Team: {{team_name}}'
      - name: notify-finops
        type: call
        call: slack.post-message
        with:
          channel: finops-alerts
          text: 'AWS cost anomaly on account {{aws_account_id}}: ${{anomaly_amount}} over baseline. Team: {{team_name}}. Jira: {{create-ticket.key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → aws-cloud-cost-anomaly-responder.yml

Identifies orphaned Azure resources, generates a cleanup plan, gets approval via ServiceNow, and executes deletion.

naftiko: '0.5'
info:
  label: Azure Resource Cleanup Orchestrator
  description: Identifies orphaned Azure resources, generates a cleanup plan, gets approval via ServiceNow, and executes deletion.
  tags:
  - cloud
  - microsoft-azure
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: azure-cleanup
    port: 8080
    tools:
    - name: cleanup-orphaned-resources
      description: Identify orphaned Azure resources, get ServiceNow approval, and execute cleanup.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Azure resource group.
      steps:
      - name: scan-resources
        type: call
        call: azure.list-resources
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
      - name: create-approval
        type: call
        call: servicenow.create-change
        with:
          short_description: Azure resource cleanup for {{resource_group}}
          category: cloud
      - name: execute-cleanup
        type: call
        call: azure.delete-resources
        with:
          resource_group: '{{resource_group}}'
          change_number: '{{create-approval.number}}'
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: resources
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/resources
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      operations:
      - name: list-resources
        method: GET
      - name: delete-resources
        method: DELETE
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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 → azure-resource-cleanup-orchestrator.yml

Retrieves incident status, priority, and assignment group from ServiceNow by ticket number.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status Lookup
  description: Retrieves incident status, priority, and assignment group from ServiceNow by ticket number.
  tags:
  - itsm
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident-status
      description: Look up a ServiceNow incident and return its current state and assignment.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number.
      call: servicenow.get-incident
      with:
        incident_number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: priority
        type: string
        mapping: $.result.priority
      - name: assignment_group
        type: string
        mapping: $.result.assignment_group.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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

Monitors data center capacity via Datadog, creates a ServiceNow change request when thresholds are breached, and alerts the infrastructure team on Microsoft Teams.

naftiko: '0.5'
info:
  label: Data Center Capacity Alert Orchestrator
  description: Monitors data center capacity via Datadog, creates a ServiceNow change request when thresholds are breached, and alerts the infrastructure team on Microsoft Teams.
  tags:
  - infrastructure
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: dc-capacity
    port: 8080
    tools:
    - name: handle-capacity-alert
      description: When data center capacity threshold is breached, create a ServiceNow change request and alert the infra team on Teams.
      inputParameters:
      - name: datacenter_id
        in: body
        type: string
        description: Data center identifier.
      - name: metric_name
        in: body
        type: string
        description: Capacity metric name.
      steps:
      - name: get-metric
        type: call
        call: datadog.query-metric
        with:
          datacenter_id: '{{datacenter_id}}'
          metric: '{{metric_name}}'
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: Capacity threshold breached in {{datacenter_id}}
          category: infrastructure
      - name: notify-teams
        type: call
        call: teams.post-message
        with:
          channel: Infrastructure Alerts
          text: 'DC {{datacenter_id}} capacity alert. Change request: {{create-change.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: query
      path: /query
      operations:
      - name: query-metric
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → data-center-capacity-alert-orchestrator.yml

Retrieves upcoming patent filing deadlines from the IP management system, creates reminder tasks in Jira, and sends digest notifications via email.

naftiko: '0.5'
info:
  label: Patent Filing Deadline Tracker Orchestrator
  description: Retrieves upcoming patent filing deadlines from the IP management system, creates reminder tasks in Jira, and sends digest notifications via email.
  tags:
  - legal
  - jira
  - email
capability:
  exposes:
  - type: mcp
    namespace: ip-tracking
    port: 8080
    tools:
    - name: track-patent-deadlines
      description: Track patent filing deadlines, create Jira reminders, and send email notifications.
      inputParameters:
      - name: days_ahead
        in: body
        type: number
        description: Number of days ahead to look for deadlines.
      steps:
      - name: get-deadlines
        type: call
        call: ip-mgmt.get-upcoming-deadlines
        with:
          days_ahead: '{{days_ahead}}'
      - name: create-tasks
        type: call
        call: jira.create-issue
        with:
          project: IP
          summary: Patent filing deadlines in next {{days_ahead}} days
          issue_type: Task
      - name: send-digest
        type: call
        call: email.send-message
        with:
          to: ip-team@broadcom.com
          subject: Patent Filing Deadline Digest
          body: 'Upcoming deadlines: {{get-deadlines.count}} filings due'
  consumes:
  - type: http
    namespace: ip-mgmt
    baseUri: https://ip-management.broadcom.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ip_mgmt_token
    resources:
    - name: deadlines
      path: /deadlines
      operations:
      - name: get-upcoming-deadlines
        method: GET
  - type: http
    namespace: jira
    baseUri: https://broadcom.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: email
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.graph_token
    resources:
    - name: mail
      path: /me/sendMail
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → patent-filing-deadline-tracker-orchestrator.yml

Retrieves employee details from Workday including name, title, department, and manager.

naftiko: '0.5'
info:
  label: Workday Employee Directory Lookup
  description: Retrieves employee details from Workday including name, title, department, and manager.
  tags:
  - hr
  - workday
  - directory
capability:
  exposes:
  - type: mcp
    namespace: hr-directory
    port: 8080
    tools:
    - name: get-employee-details
      description: Look up a Workday employee by worker ID and return their profile information.
      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.descriptor
      - name: title
        type: string
        mapping: $.worker.businessTitle
      - name: department
        type: string
        mapping: $.worker.supervisoryOrganization.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: /broadcom/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

Initiates an OpenShift cluster upgrade, monitors progress via Datadog, and posts status updates to Microsoft Teams.

naftiko: '0.5'
info:
  label: Red Hat OpenShift Cluster Upgrade Orchestrator
  description: Initiates an OpenShift cluster upgrade, monitors progress via Datadog, and posts status updates to Microsoft Teams.
  tags:
  - infrastructure
  - openshift
  - datadog
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cluster-upgrade
    port: 8080
    tools:
    - name: upgrade-openshift-cluster
      description: Upgrade an OpenShift cluster, monitor via Datadog, and post status to Teams.
      inputParameters:
      - name: cluster_name
        in: body
        type: string
        description: OpenShift cluster name.
      - name: target_version
        in: body
        type: string
        description: Target OpenShift version.
      steps:
      - name: initiate-upgrade
        type: call
        call: openshift.start-upgrade
        with:
          cluster: '{{cluster_name}}'
          version: '{{target_version}}'
      - name: check-health
        type: call
        call: datadog.get-cluster-health
        with:
          cluster: '{{cluster_name}}'
      - name: post-status
        type: call
        call: teams.post-message
        with:
          channel: Platform Ops
          text: 'OpenShift cluster {{cluster_name}} upgrade to {{target_version}} initiated. Health: {{check-health.status}}'
  consumes:
  - type: http
    namespace: openshift
    baseUri: https://api.openshift.broadcom.com
    authentication:
      type: bearer
      token: $secrets.openshift_token
    resources:
    - name: clusters
      path: /apis/config.openshift.io/v1/clusterversions
      operations:
      - name: start-upgrade
        method: PATCH
  - 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: get-cluster-health
        method: GET
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → red-hat-openshift-cluster-upgrade-orchestrator.yml

Queries Palo Alto Networks firewall threat logs for a specified source IP.

naftiko: '0.5'
info:
  label: Palo Alto Networks Threat Log Lookup
  description: Queries Palo Alto Networks firewall threat logs for a specified source IP.
  tags:
  - security
  - palo-alto-networks
  - threat-detection
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: get-threat-logs
      description: Retrieve threat log entries for a source IP.
      inputParameters:
      - name: source_ip
        in: body
        type: string
        description: The source IP address.
      call: paloalto.query-threat-logs
      with:
        source_ip: '{{source_ip}}'
      outputParameters:
      - name: threat_count
        type: number
        mapping: $.result.log.logs.@count
  consumes:
  - type: http
    namespace: paloalto
    baseUri: https://broadcom-fw.panw.com/api
    authentication:
      type: apiKey
      key: $secrets.paloalto_api_key
      headerName: X-PAN-KEY
    resources:
    - name: threat-logs
      path: /log?type=threat&query=(addr.src in {{source_ip}})
      inputParameters:
      - name: source_ip
        in: query
      operations:
      - name: query-threat-logs
        method: GET
Open in Framework → View in Fleet → palo-alto-networks-threat-log-lookup.yml

Retrieves candidate applications from LinkedIn Recruiter, creates candidate profiles in Workday, and notifies hiring managers via Slack.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline Orchestrator
  description: Retrieves candidate applications from LinkedIn Recruiter, creates candidate profiles in Workday, and notifies hiring managers via Slack.
  tags:
  - hr
  - linkedin
  - workday
  - slack
capability:
  exposes:
  - type: mcp
    namespace: talent-pipeline
    port: 8080
    tools:
    - name: process-talent-pipeline
      description: Process LinkedIn talent pipeline by creating Workday profiles and notifying hiring managers.
      inputParameters:
      - name: job_posting_id
        in: body
        type: string
        description: LinkedIn job posting ID.
      steps:
      - name: get-applicants
        type: call
        call: linkedin.get-applications
        with:
          posting_id: '{{job_posting_id}}'
      - name: create-candidates
        type: call
        call: workday.create-candidate
        with:
          source: LinkedIn
          posting_id: '{{job_posting_id}}'
      - name: notify-managers
        type: call
        call: slack.post-message
        with:
          channel: '#hiring'
          text: 'New LinkedIn applicants for posting {{job_posting_id}}: {{get-applicants.count}} candidates'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: applications
      path: /jobApplications
      operations:
      - name: get-applications
        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: /broadcom/candidates
      operations:
      - name: create-candidate
        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 → linkedin-talent-pipeline-orchestrator.yml

Retrieves Jira issue details including status, assignee, priority, and story points.

naftiko: '0.5'
info:
  label: Jira Issue Details Lookup
  description: Retrieves Jira issue details including status, assignee, priority, and story points.
  tags:
  - project-management
  - jira
  - agile
capability:
  exposes:
  - type: mcp
    namespace: project-mgmt
    port: 8080
    tools:
    - name: get-issue-details
      description: Look up a Jira issue by key and return its details.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: The Jira issue key.
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
      outputParameters:
      - 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://broadcom.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-details-lookup.yml

Detects material shortages from SAP MRP, creates an urgent purchase requisition, and notifies procurement via Slack.

naftiko: '0.5'
info:
  label: SAP Material Shortage Alert Orchestrator
  description: Detects material shortages from SAP MRP, creates an urgent purchase requisition, and notifies procurement via Slack.
  tags:
  - supply-chain
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: material-shortage
    port: 8080
    tools:
    - name: handle-material-shortage
      description: Detect SAP material shortages, create purchase requisitions, and alert procurement.
      inputParameters:
      - name: plant_code
        in: body
        type: string
        description: SAP plant code.
      - name: material_number
        in: body
        type: string
        description: SAP material number.
      steps:
      - name: check-mrp
        type: call
        call: sap.get-mrp-results
        with:
          plant: '{{plant_code}}'
          material: '{{material_number}}'
      - name: create-pr
        type: call
        call: sap.create-purchase-req
        with:
          material: '{{material_number}}'
          plant: '{{plant_code}}'
          urgency: high
      - name: notify-procurement
        type: call
        call: slack.post-message
        with:
          channel: '#procurement'
          text: 'Material shortage: {{material_number}} at plant {{plant_code}}. PR created: {{create-pr.number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/MM_MRP_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: mrp
      path: /A_MRPResult
      operations:
      - name: get-mrp-results
        method: GET
      - name: create-purchase-req
        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 → sap-material-shortage-alert-orchestrator.yml

When a Datadog monitor for production semiconductor or VMware infrastructure crosses a critical threshold, creates a PagerDuty incident and posts a Slack alert for on-call response.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Alert Escalation
  description: When a Datadog monitor for production semiconductor or VMware infrastructure crosses a critical threshold, creates a PagerDuty incident and posts a Slack alert for on-call response.
  tags:
  - observability
  - datadog
  - pagerduty
  - slack
  - monitoring
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: escalate-monitor-alert
      description: Given a Datadog monitor ID in ALERT state and PagerDuty service ID, fetch monitor details, trigger a PagerDuty incident, and post a Slack alert. Use for production monitors covering networking chips, VMware infrastructure, or enterprise software SLAs.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: The Datadog monitor ID in ALERT state.
      - name: pagerduty_service_id
        in: body
        type: string
        description: The PagerDuty service ID to route the incident to.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: '{{get-monitor.name}} — ALERT'
          service_id: '{{pagerduty_service_id}}'
          body: 'Monitor: {{get-monitor.name}}

            Query: {{get-monitor.query}}'
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: infrastructure-alerts
          text: 'Datadog ALERT: {{get-monitor.name}} | PagerDuty incident created for {{pagerduty_service_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: 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
  - 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 → datadog-infrastructure-alert-escalation.yml

Orchestrates firmware releases for Broadcom network switch ASICs by verifying CI status in GitHub, creating a Jira release ticket, and publishing notes to Confluence.

naftiko: '0.5'
info:
  label: Network Switch Firmware Release Orchestrator
  description: Orchestrates firmware releases for Broadcom network switch ASICs by verifying CI status in GitHub, creating a Jira release ticket, and publishing notes to Confluence.
  tags:
  - chip-design
  - product-lifecycle
  - github
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: firmware-release
    port: 8080
    tools:
    - name: release-switch-firmware
      description: Orchestrate network switch firmware release across GitHub, Jira, and Confluence.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The firmware repository name.
      - name: version
        in: body
        type: string
        description: The firmware version.
      steps:
      - name: check-ci
        type: call
        call: github.get-workflow-run
        with:
          repo: '{{repo_name}}'
          branch: release/{{version}}
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: NETSW
          summary: Firmware Release {{version}}
          issue_type: Task
      - name: publish-notes
        type: call
        call: confluence.create-page
        with:
          space: FIRMWARE
          title: Release Notes - {{version}}
          body: 'Firmware {{version}} released. CI: {{check-ci.conclusion}}. Jira: {{create-ticket.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?branch={{branch}}&per_page=1
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: query
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: jira
    baseUri: https://broadcom.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: confluence
    baseUri: https://broadcom.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
Open in Framework → View in Fleet → network-switch-firmware-release-orchestrator.yml

Identifies SAP Concur expense reports pending manager approval beyond the policy threshold and sends Slack reminders to the responsible approvers.

naftiko: '0.5'
info:
  label: Concur Expense Report Approval Escalation
  description: Identifies SAP Concur expense reports pending manager approval beyond the policy threshold and sends Slack reminders to the responsible approvers.
  tags:
  - finance
  - expense-management
  - sap-concur
  - slack
  - approval
capability:
  exposes:
  - type: mcp
    namespace: expense-ops
    port: 8080
    tools:
    - name: escalate-pending-expenses
      description: Retrieve expense reports from SAP Concur that have been pending approval beyond the specified number of days and send Slack reminders to the responsible approvers. Use for weekly expense compliance enforcement.
      inputParameters:
      - name: pending_days
        in: body
        type: integer
        description: Minimum number of days an expense report must be pending to trigger a reminder. Broadcom policy typically requires approval within 5 business days.
      steps:
      - name: get-pending-reports
        type: call
        call: concur.list-pending-reports
        with:
          approvalStatusCode: A_PEND
          limit: '100'
      - name: notify-approvers
        type: call
        call: slack.post-message
        with:
          channel: expense-reminders
          text: 'Reminder: {{get-pending-reports.count}} expense report(s) have been pending approval for more than {{pending_days}} days. Please review in SAP Concur.'
  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-pending-reports
        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 → concur-expense-report-approval-escalation.yml

Retrieves the bill of materials for a semiconductor component from SAP S/4HANA.

naftiko: '0.5'
info:
  label: SAP Material Bill of Materials Lookup
  description: Retrieves the bill of materials for a semiconductor component from SAP S/4HANA.
  tags:
  - manufacturing
  - sap
  - product-lifecycle
capability:
  exposes:
  - type: mcp
    namespace: engineering
    port: 8080
    tools:
    - name: get-material-bom
      description: Look up bill of materials for a SAP material.
      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-bom
      with:
        material: '{{material_number}}'
        plant: '{{plant}}'
      outputParameters:
      - name: components
        type: array
        mapping: $.d.results[*].Component
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-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: /MaterialBOMItem?$filter=Material eq '{{material}}' and Plant eq '{{plant}}'
      inputParameters:
      - name: material
        in: query
      - name: plant
        in: query
      operations:
      - name: get-bom
        method: GET
Open in Framework → View in Fleet → sap-material-bill-of-materials-lookup.yml

Retrieves follower count for the Broadcom LinkedIn company page.

naftiko: '0.5'
info:
  label: LinkedIn Company Follower Count Lookup
  description: Retrieves follower count for the Broadcom LinkedIn company page.
  tags:
  - marketing
  - linkedin
  - social-media
capability:
  exposes:
  - type: mcp
    namespace: social
    port: 8080
    tools:
    - name: get-follower-stats
      description: Retrieve follower statistics for the Broadcom LinkedIn page.
      inputParameters:
      - name: time_range
        in: body
        type: string
        description: Time range for follower data.
      call: linkedin.get-follower-statistics
      with:
        organization_id: broadcom
      outputParameters:
      - name: total_followers
        type: number
        mapping: $.elements[0].followerCounts.organicFollowerCount
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: follower-statistics
      path: /organizationalEntityFollowerStatistics?q=organizationalEntity&organizationalEntity=urn:li:organization:broadcom
      operations:
      - name: get-follower-statistics
        method: GET
Open in Framework → View in Fleet → linkedin-company-follower-count-lookup.yml

When a new GitHub release is tagged for a VMware or CA software product, compiles structured release notes from merged PRs and publishes to Confluence and the product Slack channel.

naftiko: '0.5'
info:
  label: GitHub Release Notes Publisher
  description: When a new GitHub release is tagged for a VMware or CA software product, compiles structured release notes from merged PRs and publishes to Confluence and the product Slack channel.
  tags:
  - devops
  - github
  - confluence
  - slack
  - release-management
capability:
  exposes:
  - type: mcp
    namespace: release-management
    port: 8080
    tools:
    - name: publish-release-notes
      description: Given a GitHub repository and release tag, fetch merged PRs since the prior tag, compile structured release notes, publish to Confluence, and announce in the product Slack channel. Use when a VMware, CA, or infrastructure software release is cut.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. 'broadcom/vsphere-client'.
      - name: release_tag
        in: body
        type: string
        description: The release tag, e.g. 'v8.0.3'.
      - name: confluence_space_key
        in: body
        type: string
        description: The Confluence space key for release notes, e.g. 'VMWREL'.
      steps:
      - name: get-prs
        type: call
        call: github.list-merged-prs
        with:
          repo: '{{repo}}'
      - name: publish-notes
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          title: 'Release Notes: {{repo}} {{release_tag}}'
          body: Release {{release_tag}} — {{get-prs.count}} changes merged.
      - name: announce
        type: call
        call: slack.post-message
        with:
          channel: product-releases
          text: '{{repo}} {{release_tag}} released. Notes: {{publish-notes.url}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/{{repo}}/pulls
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-merged-prs
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://broadcom.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: 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-release-notes-publisher.yml

Handles supply chain disruptions by querying SAP for affected POs, identifying impacted Salesforce accounts, and alerting supply chain ops via Teams.

naftiko: '0.5'
info:
  label: Supply Chain Disruption Alert Orchestrator
  description: Handles supply chain disruptions by querying SAP for affected POs, identifying impacted Salesforce accounts, and alerting supply chain ops via Teams.
  tags:
  - supply-chain
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: handle-disruption
      description: Orchestrate supply chain disruption response across SAP, Salesforce, and Teams.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The SAP supplier ID.
      - name: disruption_type
        in: body
        type: string
        description: Type of disruption.
      steps:
      - name: get-affected-pos
        type: call
        call: sap.search-purchase-orders
        with:
          supplier: '{{supplier_id}}'
      - name: get-impacted-accounts
        type: call
        call: salesforce.query
        with:
          soql: SELECT Id, Name FROM Account WHERE Supplier_ID__c = '{{supplier_id}}'
      - name: send-alert
        type: call
        call: msteams.send-message
        with:
          channel: supply-chain-ops
          message: 'Disruption: {{disruption_type}} from {{supplier_id}}. POs: {{get-affected-pos.count}}, Accounts: {{get-impacted-accounts.totalSize}}.'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-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}}'
      inputParameters:
      - name: supplier
        in: query
      operations:
      - name: search-purchase-orders
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      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/supply-chain-ops/channels/general/messages
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → supply-chain-disruption-alert-orchestrator.yml

When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Slack, and triggers a PagerDuty incident for the on-call engineering team.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure Handler
  description: When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug, posts an alert to Slack, and triggers a PagerDuty incident for the on-call engineering team.
  tags:
  - devops
  - cicd
  - github
  - jira
  - slack
  - pagerduty
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: devops-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions failure on a protected branch, create a Jira bug, post a Slack alert to the engineering channel, and trigger PagerDuty for on-call response. Use for critical CI/CD failures affecting release pipelines.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name, e.g. 'broadcom/vmware-vsphere'.
      - name: branch
        in: body
        type: string
        description: The Git branch where the failure occurred.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions run ID.
      - name: failed_job
        in: body
        type: string
        description: The name of the failed CI job.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{failed_job}}'
          description: 'Repository: {{repo}}

            Branch: {{branch}}

            Run ID: {{run_id}}'
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: engineering-alerts
          text: 'Pipeline failure in {{repo}} on {{branch}}. Job: {{failed_job}} | Jira: {{create-bug.key}} | Run: {{run_id}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'CI Failure: {{repo}} {{branch}} {{failed_job}}'
          service_id: $secrets.pagerduty_engineering_service_id
  consumes:
  - type: http
    namespace: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - 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 → ci-cd-pipeline-failure-handler.yml

Retrieves the power state and resource allocation for a VMware virtual machine.

naftiko: '0.5'
info:
  label: VMware vCenter VM Status Lookup
  description: Retrieves the power state and resource allocation for a VMware virtual machine.
  tags:
  - infrastructure
  - vmware
capability:
  exposes:
  - type: mcp
    namespace: vmware-infra
    port: 8080
    tools:
    - name: get-vm-status
      description: Look up VM power state and CPU/memory allocation by VM name.
      inputParameters:
      - name: vm_name
        in: body
        type: string
        description: The VMware virtual machine name.
      call: vcenter.get-vm
      with:
        vm_name: '{{vm_name}}'
      outputParameters:
      - name: power_state
        type: string
        mapping: $.value[0].power_state
      - name: cpu_count
        type: number
        mapping: $.value[0].cpu_count
  consumes:
  - type: http
    namespace: vcenter
    baseUri: https://vcenter.broadcom.com/api/vcenter
    authentication:
      type: bearer
      token: $secrets.vcenter_token
    resources:
    - name: vms
      path: /vm?filter.names={{vm_name}}
      inputParameters:
      - name: vm_name
        in: query
      operations:
      - name: get-vm
        method: GET
Open in Framework → View in Fleet → vmware-vcenter-vm-status-lookup.yml

When a Datadog alert fires, enriches it with service metadata, triggers a PagerDuty incident, and posts context to Slack.

naftiko: '0.5'
info:
  label: Datadog Alert to PagerDuty Escalation Orchestrator
  description: When a Datadog alert fires, enriches it with service metadata, triggers a PagerDuty incident, and posts context to Slack.
  tags:
  - observability
  - datadog
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: alert-escalation
    port: 8080
    tools:
    - name: escalate-datadog-alert
      description: Escalate a Datadog alert by triggering PagerDuty and posting context to Slack.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID.
      - name: service_name
        in: body
        type: string
        description: Affected service name.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor-details
        with:
          monitor_id: '{{monitor_id}}'
      - name: trigger-incident
        type: call
        call: pagerduty.create-incident
        with:
          service_name: '{{service_name}}'
          title: 'Alert: {{get-monitor.name}}'
      - name: post-context
        type: call
        call: slack.post-message
        with:
          channel: '#incidents'
          text: 'PagerDuty incident created for {{service_name}}: {{get-monitor.name}}. PD: {{trigger-incident.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-details
        method: GET
  - 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 → datadog-alert-to-pagerduty-escalation-orchestrator.yml

Retrieves branch protection rules for a GitHub repository branch.

naftiko: '0.5'
info:
  label: GitHub Repository Branch Protection Lookup
  description: Retrieves branch protection rules for a GitHub repository branch.
  tags:
  - devops
  - github
  - security
capability:
  exposes:
  - type: mcp
    namespace: source-control
    port: 8080
    tools:
    - name: get-branch-protection
      description: Look up branch protection rules for a repository branch.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: Repository in org/repo format.
      - name: branch
        in: body
        type: string
        description: The branch name.
      call: github.get-branch-protection
      with:
        repo: '{{repo_name}}'
        branch: '{{branch}}'
      outputParameters:
      - name: required_reviewers
        type: number
        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}}/branches/{{branch}}/protection
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch-protection
        method: GET
Open in Framework → View in Fleet → github-repository-branch-protection-lookup.yml

Reviews vendor compliance by checking SAP Ariba certifications, querying delivery metrics in Snowflake, and publishing a report to Confluence.

naftiko: '0.5'
info:
  label: Vendor Compliance Review Orchestrator
  description: Reviews vendor compliance by checking SAP Ariba certifications, querying delivery metrics in Snowflake, and publishing a report to Confluence.
  tags:
  - supply-chain
  - procurement
  - sap
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: vendor-compliance
    port: 8080
    tools:
    - name: review-vendor-compliance
      description: Orchestrate vendor compliance review across SAP Ariba, Snowflake, and Confluence.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The vendor ID.
      steps:
      - name: get-certifications
        type: call
        call: ariba.get-supplier-profile
        with:
          vendor_id: '{{vendor_id}}'
      - name: get-metrics
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT on_time_rate, quality_rate FROM vendor_performance WHERE vendor_id = '{{vendor_id}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space: PROCUREMENT
          title: Vendor Compliance - {{vendor_id}}
          body: 'On-time: {{get-metrics.on_time_rate}}%, Quality: {{get-metrics.quality_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/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-supplier-profile
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://broadcom.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: confluence
    baseUri: https://broadcom.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
Open in Framework → View in Fleet → vendor-compliance-review-orchestrator.yml

Retrieves a snapshot of a Grafana dashboard panel for a given time range.

naftiko: '0.5'
info:
  label: Grafana Dashboard Snapshot Lookup
  description: Retrieves a snapshot of a Grafana dashboard panel for a given time range.
  tags:
  - observability
  - grafana
capability:
  exposes:
  - type: mcp
    namespace: grafana-dashboards
    port: 8080
    tools:
    - name: get-dashboard-snapshot
      description: Retrieve Grafana dashboard snapshot by dashboard UID.
      inputParameters:
      - name: dashboard_uid
        in: body
        type: string
        description: Grafana dashboard UID.
      call: grafana.get-dashboard
      with:
        uid: '{{dashboard_uid}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.dashboard.title
      - name: panels
        type: string
        mapping: $.dashboard.panels
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.broadcom.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dashboard
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-snapshot-lookup.yml

Provisions a new Kubernetes namespace with resource quotas, configures RBAC via Okta groups, and logs the provisioning in ServiceNow.

naftiko: '0.5'
info:
  label: Kubernetes Namespace Provisioning Orchestrator
  description: Provisions a new Kubernetes namespace with resource quotas, configures RBAC via Okta groups, and logs the provisioning in ServiceNow.
  tags:
  - infrastructure
  - kubernetes
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: k8s-provisioning
    port: 8080
    tools:
    - name: provision-namespace
      description: Provision a K8s namespace with quotas, configure RBAC via Okta, and log in ServiceNow.
      inputParameters:
      - name: namespace_name
        in: body
        type: string
        description: Kubernetes namespace name.
      - name: team_name
        in: body
        type: string
        description: Team requesting the namespace.
      steps:
      - name: create-namespace
        type: call
        call: k8s.create-namespace
        with:
          name: '{{namespace_name}}'
          team: '{{team_name}}'
      - name: configure-rbac
        type: call
        call: okta.assign-group
        with:
          group_name: k8s-{{namespace_name}}
          team: '{{team_name}}'
      - name: log-provision
        type: call
        call: servicenow.create-request
        with:
          short_description: 'K8s namespace provisioned: {{namespace_name}} for {{team_name}}'
  consumes:
  - type: http
    namespace: k8s
    baseUri: https://k8s-api.broadcom.com
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: namespaces
      path: /api/v1/namespaces
      operations:
      - name: create-namespace
        method: POST
  - type: http
    namespace: okta
    baseUri: https://broadcom.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: groups
      path: /groups
      operations:
      - name: assign-group
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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 → kubernetes-namespace-provisioning-orchestrator.yml

Retrieves the payment status of a vendor invoice from SAP.

naftiko: '0.5'
info:
  label: SAP Vendor Invoice Status Lookup
  description: Retrieves the payment status of a vendor invoice from SAP.
  tags:
  - finance
  - sap
capability:
  exposes:
  - type: mcp
    namespace: vendor-finance
    port: 8080
    tools:
    - name: get-invoice-status
      description: Look up SAP vendor invoice payment status by invoice number.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The SAP vendor invoice number.
      call: sap.get-invoice
      with:
        invoice_number: '{{invoice_number}}'
      outputParameters:
      - name: payment_status
        type: string
        mapping: $.d.PaymentStatus
      - name: amount
        type: number
        mapping: $.d.InvoiceAmount
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/FI_VENDOR_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoices
      path: /A_VendorInvoice('{{invoice_number}}')
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → sap-vendor-invoice-status-lookup.yml

Retrieves current budget utilization from SAP, calculates reallocation recommendations, and submits an approval request via ServiceNow.

naftiko: '0.5'
info:
  label: SAP Budget Reallocation Orchestrator
  description: Retrieves current budget utilization from SAP, calculates reallocation recommendations, and submits an approval request via ServiceNow.
  tags:
  - finance
  - sap
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: budget-realloc
    port: 8080
    tools:
    - name: reallocate-budget
      description: Analyze SAP budget utilization, generate reallocation recommendations, and submit ServiceNow approval.
      inputParameters:
      - name: cost_center
        in: body
        type: string
        description: SAP cost center code.
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year.
      steps:
      - name: get-budget
        type: call
        call: sap.get-budget-utilization
        with:
          cost_center: '{{cost_center}}'
          fiscal_year: '{{fiscal_year}}'
      - name: submit-approval
        type: call
        call: servicenow.create-request
        with:
          short_description: Budget reallocation for {{cost_center}} FY{{fiscal_year}}
          category: finance
  consumes:
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/FI_BUDGET_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: budget
      path: /A_BudgetUtilization(CostCenter='{{cost_center}}')
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-budget-utilization
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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 → sap-budget-reallocation-orchestrator.yml

After a Zoom webinar ends, retrieves registrant data, creates leads in Salesforce, and triggers a follow-up email campaign via HubSpot.

naftiko: '0.5'
info:
  label: Zoom Webinar Lead Capture Orchestrator
  description: After a Zoom webinar ends, retrieves registrant data, creates leads in Salesforce, and triggers a follow-up email campaign via HubSpot.
  tags:
  - marketing
  - zoom
  - salesforce
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: webinar-leads
    port: 8080
    tools:
    - name: capture-webinar-leads
      description: Capture Zoom webinar leads, create Salesforce records, and trigger HubSpot follow-up.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: Zoom webinar ID.
      steps:
      - name: get-registrants
        type: call
        call: zoom.get-webinar-registrants
        with:
          webinar_id: '{{webinar_id}}'
      - name: create-leads
        type: call
        call: salesforce.create-lead
        with:
          source: Zoom Webinar {{webinar_id}}
      - name: trigger-campaign
        type: call
        call: hubspot.enroll-contacts
        with:
          workflow_id: webinar-followup
          webinar_id: '{{webinar_id}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: webinars
      path: /webinars/{{webinar_id}}/registrants
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar-registrants
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.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: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: workflows
      path: /automation/v4/workflows
      operations:
      - name: enroll-contacts
        method: POST
Open in Framework → View in Fleet → zoom-webinar-lead-capture-orchestrator.yml

Analyzes AWS cost data, identifies optimization opportunities, creates a Jira epic for implementation, and shares findings on Slack.

naftiko: '0.5'
info:
  label: Cloud Cost Optimization Recommendation Orchestrator
  description: Analyzes AWS cost data, identifies optimization opportunities, creates a Jira epic for implementation, and shares findings on Slack.
  tags:
  - finops
  - aws
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cost-optimization
    port: 8080
    tools:
    - name: generate-cost-recommendations
      description: Generate cloud cost optimization recommendations by analyzing AWS spend, creating Jira implementation epics, and sharing on Slack.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: AWS account ID to analyze.
      - name: lookback_days
        in: body
        type: number
        description: Number of days to analyze.
      steps:
      - name: get-cost-data
        type: call
        call: aws.get-cost-and-usage
        with:
          account_id: '{{account_id}}'
          lookback_days: '{{lookback_days}}'
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project: FINOPS
          summary: Cost optimization for AWS account {{account_id}}
          issue_type: Epic
      - name: share-findings
        type: call
        call: slack.post-message
        with:
          channel: '#finops'
          text: 'Cost optimization opportunities for account {{account_id}}: Jira epic {{create-epic.key}}'
  consumes:
  - type: http
    namespace: aws
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_ce_token
    resources:
    - name: cost-and-usage
      path: /
      operations:
      - name: get-cost-and-usage
        method: POST
  - type: http
    namespace: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cloud-cost-optimization-recommendation-orchestrator.yml

Scans firmware images for known vulnerabilities, creates a Jira ticket for critical findings, and notifies the engineering team via Slack.

naftiko: '0.5'
info:
  label: Firmware Vulnerability Scan and Patch Orchestrator
  description: Scans firmware images for known vulnerabilities, creates a Jira ticket for critical findings, and notifies the engineering team via Slack.
  tags:
  - security
  - firmware
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: firmware-security
    port: 8080
    tools:
    - name: scan-and-patch-firmware
      description: Scan a firmware image for vulnerabilities, open a Jira issue for critical findings, and alert the team on Slack.
      inputParameters:
      - name: firmware_version
        in: body
        type: string
        description: Firmware version identifier.
      - name: product_line
        in: body
        type: string
        description: Product line name.
      steps:
      - name: scan-firmware
        type: call
        call: scanner.scan-image
        with:
          firmware_version: '{{firmware_version}}'
          product_line: '{{product_line}}'
      - name: create-jira-ticket
        type: call
        call: jira.create-issue
        with:
          project: FW-SEC
          summary: Critical vulnerabilities in {{product_line}} firmware {{firmware_version}}
          issue_type: Bug
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#firmware-security'
          text: 'Firmware scan complete for {{product_line}} v{{firmware_version}}. Jira: {{create-jira-ticket.key}}'
  consumes:
  - type: http
    namespace: scanner
    baseUri: https://firmware-scanner.broadcom.com/api/v1
    authentication:
      type: bearer
      token: $secrets.firmware_scanner_token
    resources:
    - name: scans
      path: /scan
      operations:
      - name: scan-image
        method: POST
  - type: http
    namespace: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → firmware-vulnerability-scan-and-patch-orchestrator.yml

Retrieves the count of open Dependabot alerts for a GitHub repository.

naftiko: '0.5'
info:
  label: GitHub Repository Vulnerability Count Lookup
  description: Retrieves the count of open Dependabot alerts for a GitHub repository.
  tags:
  - security
  - github
capability:
  exposes:
  - type: mcp
    namespace: repo-security
    port: 8080
    tools:
    - name: get-vulnerability-count
      description: Look up open Dependabot alert count for a GitHub repository.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name (org/repo).
      call: github.get-alerts
      with:
        repo: '{{repo_name}}'
      outputParameters:
      - name: alert_count
        type: number
        mapping: $.length
      - name: critical_count
        type: number
        mapping: $.critical_count
  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?state=open
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-alerts
        method: GET
Open in Framework → View in Fleet → github-repository-vulnerability-count-lookup.yml

Decommissions a VMware VM by powering it off, archiving disks to S3, removing DNS records from Cloudflare, and closing the ServiceNow CI record.

naftiko: '0.5'
info:
  label: VMware VM Lifecycle Decommission Orchestrator
  description: Decommissions a VMware VM by powering it off, archiving disks to S3, removing DNS records from Cloudflare, and closing the ServiceNow CI record.
  tags:
  - infrastructure
  - vmware
  - aws-s3
  - cloudflare
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: vm-decommission
    port: 8080
    tools:
    - name: decommission-vm
      description: Decommission a VMware VM by powering off, archiving disks to S3, removing DNS, and closing ServiceNow CI.
      inputParameters:
      - name: vm_name
        in: body
        type: string
        description: VMware virtual machine name.
      steps:
      - name: power-off
        type: call
        call: vmware.power-off-vm
        with:
          vm_name: '{{vm_name}}'
      - name: archive-disks
        type: call
        call: s3.put-object
        with:
          bucket: broadcom-vm-archives
          key: '{{vm_name}}/disk-backup.vmdk'
      - name: remove-dns
        type: call
        call: cloudflare.delete-record
        with:
          hostname: '{{vm_name}}.broadcom.com'
      - name: close-ci
        type: call
        call: servicenow.update-ci
        with:
          name: '{{vm_name}}'
          status: retired
  consumes:
  - type: http
    namespace: vmware
    baseUri: https://vcenter.broadcom.com/api/vcenter
    authentication:
      type: bearer
      token: $secrets.vcenter_token
    resources:
    - name: vms
      path: /vm/{{vm_id}}/power
      operations:
      - name: power-off-vm
        method: POST
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: dns
      path: /zones/{{zone_id}}/dns_records
      operations:
      - name: delete-record
        method: DELETE
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci_server
      operations:
      - name: update-ci
        method: PATCH
Open in Framework → View in Fleet → vmware-vm-lifecycle-decommission-orchestrator.yml

Initiates a performance review cycle in Workday for a Broadcom division, creates a Jira tracking epic, and notifies HR business partners via Slack.

naftiko: '0.5'
info:
  label: Workday Performance Review Cycle Kickoff
  description: Initiates a performance review cycle in Workday for a Broadcom division, creates a Jira tracking epic, and notifies HR business partners via Slack.
  tags:
  - hr
  - performance-management
  - workday
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hr-performance
    port: 8080
    tools:
    - name: kickoff-review-cycle
      description: Given a Workday division ID and review period, initiate the performance review process, create a Jira epic to track progress, and notify HR BPs in Slack. Use at the start of each semi-annual performance review cycle.
      inputParameters:
      - name: division_id
        in: body
        type: string
        description: The Workday division ID, e.g. 'DIV-VMWARE-CLOUD' or 'DIV-SEMICONDUCTOR'.
      - name: review_period
        in: body
        type: string
        description: The review period label, e.g. 'H1-2026'.
      steps:
      - name: initiate-review
        type: call
        call: workday.create-review-process
        with:
          division_id: '{{division_id}}'
          period: '{{review_period}}'
      - name: create-epic
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          issuetype: Epic
          summary: Performance Review {{review_period}} — {{division_id}}
      - name: notify-hrbp
        type: call
        call: slack.post-message
        with:
          channel: hrbp-team
          text: 'Performance review {{review_period}} initiated for {{division_id}}. Jira epic: {{create-epic.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: review-processes
      path: /broadcom/performanceManagement/reviewProcesses
      operations:
      - name: create-review-process
        method: POST
  - type: http
    namespace: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-performance-review-cycle-kickoff.yml

When a change request for a critical enterprise software or data center system is submitted in ServiceNow, retrieves risk details, routes to the CAB via Slack, and updates the ticket status.

naftiko: '0.5'
info:
  label: Change Management Approval Gate
  description: When a change request for a critical enterprise software or data center system is submitted in ServiceNow, retrieves risk details, routes to the CAB via Slack, and updates the ticket status.
  tags:
  - itsm
  - change-management
  - servicenow
  - slack
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: route-change-request
      description: Given a ServiceNow change request number, fetch the change details and risk level, post a CAB review request to the Slack change-advisory channel, and update the change state to under review. Use for all changes to production VMware Cloud, networking, or enterprise software systems.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number, e.g. 'CHG0004567'.
      steps:
      - name: get-change
        type: call
        call: servicenow.get-change
        with:
          number: '{{change_number}}'
      - name: notify-cab
        type: call
        call: slack.post-message
        with:
          channel: change-advisory-board
          text: 'CAB Review: {{change_number}} — {{get-change.short_description}} | Risk: {{get-change.risk}} | System: {{get-change.cmdb_ci}} | Planned: {{get-change.start_date}}'
      - name: update-change
        type: call
        call: servicenow-update.patch-change
        with:
          sys_id: '{{get-change.sys_id}}'
          state: '2'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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: get-change
        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
  - type: http
    namespace: servicenow-update
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-patch
      path: /table/change_request/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: patch-change
        method: PATCH
Open in Framework → View in Fleet → change-management-approval-gate.yml

Runs quality gates for Broadcom ethernet controllers by pulling test results from Snowflake, checking Jira defects, and updating SAP quality records.

naftiko: '0.5'
info:
  label: Ethernet Controller Quality Gate Orchestrator
  description: Runs quality gates for Broadcom ethernet controllers by pulling test results from Snowflake, checking Jira defects, and updating SAP quality records.
  tags:
  - manufacturing
  - chip-design
  - snowflake
  - jira
  - sap
capability:
  exposes:
  - type: mcp
    namespace: quality
    port: 8080
    tools:
    - name: run-quality-gate
      description: Orchestrate quality gate checks across Snowflake, Jira, and SAP.
      inputParameters:
      - name: product_id
        in: body
        type: string
        description: The ethernet controller product ID.
      steps:
      - name: get-test-results
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT pass_rate, fail_count FROM quality_results WHERE product_id = '{{product_id}}'
      - name: get-defects
        type: call
        call: jira.search-issues
        with:
          jql: project = ETHQUAL AND labels = {{product_id}} AND status != Closed
      - name: update-sap-quality
        type: call
        call: sap.update-quality-inspection
        with:
          product_id: '{{product_id}}'
          pass_rate: '{{get-test-results.pass_rate}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://broadcom.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://broadcom.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
  - type: http
    namespace: sap
    baseUri: https://broadcom-s4.sap.com/sap/opu/odata/sap/API_QUALITY_INSPECTION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspections
      path: /A_QualityInspection
      operations:
      - name: update-quality-inspection
        method: PATCH
Open in Framework → View in Fleet → ethernet-controller-quality-gate-orchestrator.yml

Detects performance regressions via Dynatrace, creates a Jira performance bug, and notifies the development team via Slack.

naftiko: '0.5'
info:
  label: Dynatrace Performance Regression Orchestrator
  description: Detects performance regressions via Dynatrace, creates a Jira performance bug, and notifies the development team via Slack.
  tags:
  - observability
  - dynatrace
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: perf-regression
    port: 8080
    tools:
    - name: handle-perf-regression
      description: Detect Dynatrace performance regressions, open Jira bugs, and alert the dev team on Slack.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: Dynatrace entity ID.
      - name: threshold_ms
        in: body
        type: number
        description: Response time threshold in milliseconds.
      steps:
      - name: get-metrics
        type: call
        call: dynatrace.get-entity-metrics
        with:
          entity_id: '{{entity_id}}'
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project: PERF
          summary: Performance regression for {{entity_id}}
          issue_type: Bug
      - name: alert-devs
        type: call
        call: slack.post-message
        with:
          channel: '#performance'
          text: 'Performance regression detected for {{entity_id}}. Jira: {{create-bug.key}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://broadcom.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: metrics
      path: /metrics/query
      operations:
      - name: get-entity-metrics
        method: GET
  - type: http
    namespace: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → dynatrace-performance-regression-orchestrator.yml

Pulls vendor compliance data from SAP Ariba, runs a risk scoring model, and publishes assessment results to Confluence.

naftiko: '0.5'
info:
  label: Vendor Risk Assessment Orchestrator
  description: Pulls vendor compliance data from SAP Ariba, runs a risk scoring model, and publishes assessment results to Confluence.
  tags:
  - procurement
  - sap-ariba
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: vendor-risk
    port: 8080
    tools:
    - name: assess-vendor-risk
      description: Assess vendor risk by pulling SAP Ariba data, scoring risk, and publishing results to Confluence.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: SAP Ariba vendor ID.
      - name: assessment_year
        in: body
        type: string
        description: Assessment year.
      steps:
      - name: get-vendor-data
        type: call
        call: ariba.get-vendor-profile
        with:
          vendor_id: '{{vendor_id}}'
      - name: score-risk
        type: call
        call: risk-engine.calculate-score
        with:
          vendor_id: '{{vendor_id}}'
          compliance_data: '{{get-vendor-data.compliance_status}}'
      - name: publish-assessment
        type: call
        call: confluence.create-page
        with:
          space_key: VRISK
          title: Vendor Risk Assessment - {{get-vendor-data.vendor_name}} - {{assessment_year}}
          body: 'Risk score: {{score-risk.score}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/supplier-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: vendors
      path: /suppliers/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor-profile
        method: GET
  - type: http
    namespace: risk-engine
    baseUri: https://risk-api.broadcom.com/v1
    authentication:
      type: bearer
      token: $secrets.risk_engine_token
    resources:
    - name: scoring
      path: /score
      operations:
      - name: calculate-score
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://broadcom.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → vendor-risk-assessment-orchestrator.yml

When an employee changes roles in Workday, updates Okta group memberships, modifies ServiceNow access, and sends a transition checklist via Slack.

naftiko: '0.5'
info:
  label: Employee Role Transition Orchestrator
  description: When an employee changes roles in Workday, updates Okta group memberships, modifies ServiceNow access, and sends a transition checklist via Slack.
  tags:
  - hr
  - workday
  - okta
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: role-transition
    port: 8080
    tools:
    - name: process-role-transition
      description: Process employee role transition by updating Okta groups, ServiceNow access, and sending a Slack checklist.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: new_role
        in: body
        type: string
        description: New role title.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: update-groups
        type: call
        call: okta.update-groups
        with:
          user_email: '{{get-employee.work_email}}'
          role: '{{new_role}}'
      - name: update-access
        type: call
        call: servicenow.update-access
        with:
          user: '{{get-employee.work_email}}'
          role: '{{new_role}}'
      - name: send-checklist
        type: call
        call: slack.post-message
        with:
          channel: '{{get-employee.work_email}}'
          text: Role transition to {{new_role}} initiated. Please review your access changes.
  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: /broadcom/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://broadcom.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: groups
      path: /groups
      operations:
      - name: update-groups
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: access
      path: /table/sys_user_role
      operations:
      - name: update-access
        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 → employee-role-transition-orchestrator.yml

Checks the last refresh status for a Power BI dataset.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Status Lookup
  description: Checks the last refresh status for a Power BI dataset.
  tags:
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bi
    port: 8080
    tools:
    - name: get-dataset-refresh-status
      description: Retrieve the last refresh status for a Power BI dataset.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      call: powerbi.get-refresh-history
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
      - 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: dataset-refreshes
      path: /datasets/{{dataset_id}}/refreshes?$top=1
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-status-lookup.yml

Routes Salesforce opportunities above threshold to deal desk for approval, creates a Slack approval thread, and updates the opportunity stage upon approval.

naftiko: '0.5'
info:
  label: Salesforce Deal Desk Approval Orchestrator
  description: Routes Salesforce opportunities above threshold to deal desk for approval, creates a Slack approval thread, and updates the opportunity stage upon approval.
  tags:
  - sales
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: deal-desk
    port: 8080
    tools:
    - name: process-deal-approval
      description: Route Salesforce opportunities to deal desk, create Slack approval threads, and update opportunity stage.
      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: request-approval
        type: call
        call: slack.post-message
        with:
          channel: '#deal-desk'
          text: 'Deal approval requested: {{get-opportunity.name}} - ${{get-opportunity.amount}}'
      - name: update-stage
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          stage: Pending Approval
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://broadcom.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: 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 → salesforce-deal-desk-approval-orchestrator.yml

Retrieves running configuration from Cisco switches, stores the backup in AWS S3, and logs the backup event in ServiceNow CMDB.

naftiko: '0.5'
info:
  label: Network Switch Config Backup Orchestrator
  description: Retrieves running configuration from Cisco switches, stores the backup in AWS S3, and logs the backup event in ServiceNow CMDB.
  tags:
  - network
  - cisco
  - aws-s3
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: switch-backup
    port: 8080
    tools:
    - name: backup-switch-config
      description: Back up Cisco switch running config to S3 and log in ServiceNow CMDB.
      inputParameters:
      - name: switch_hostname
        in: body
        type: string
        description: Cisco switch hostname.
      steps:
      - name: get-config
        type: call
        call: cisco.get-running-config
        with:
          hostname: '{{switch_hostname}}'
      - name: store-backup
        type: call
        call: s3.put-object
        with:
          bucket: broadcom-switch-backups
          key: '{{switch_hostname}}/running-config.txt'
      - name: log-cmdb
        type: call
        call: servicenow.update-ci
        with:
          hostname: '{{switch_hostname}}'
          last_backup: '{{store-backup.timestamp}}'
  consumes:
  - type: http
    namespace: cisco
    baseUri: https://dnac.broadcom.com/dna/intent/api/v1
    authentication:
      type: bearer
      token: $secrets.cisco_dnac_token
    resources:
    - name: configs
      path: /network-device/config
      operations:
      - name: get-running-config
        method: GET
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci_netgear
      operations:
      - name: update-ci
        method: PATCH
Open in Framework → View in Fleet → network-switch-config-backup-orchestrator.yml

Generates a sprint planning digest for a Broadcom engineering project in Jira and posts the issue breakdown to the team Slack channel.

naftiko: '0.5'
info:
  label: Jira Sprint Planning Digest
  description: Generates a sprint planning digest for a Broadcom engineering project in Jira and posts the issue breakdown to the team Slack channel.
  tags:
  - devops
  - jira
  - slack
  - sprint-planning
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sprint-reporting
    port: 8080
    tools:
    - name: digest-sprint-board
      description: Given a Jira project key and sprint ID, fetch all open issues grouped by priority and post a sprint digest to the team Slack channel. Use at the start of sprint planning for VMware, CA software, or semiconductor engineering teams.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: The Jira project key, e.g. 'VMWRC' or 'CAENG'.
      - name: sprint_id
        in: body
        type: integer
        description: The Jira sprint ID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to post the digest to.
      steps:
      - name: get-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{project_key}} AND sprint={{sprint_id}} AND status != Done
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Sprint {{sprint_id}} digest for {{project_key}}: {{get-issues.total}} open issues.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://broadcom.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issue-search
      path: /search
      operations:
      - name: search-issues
        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 → jira-sprint-planning-digest.yml

When a high-priority ServiceNow incident is raised for a critical enterprise software or infrastructure system, fetches on-call information from PagerDuty, assigns the ticket, and posts to the operations Slack channel.

naftiko: '0.5'
info:
  label: ServiceNow Incident Triage and On-Call Routing
  description: When a high-priority ServiceNow incident is raised for a critical enterprise software or infrastructure system, fetches on-call information from PagerDuty, assigns the ticket, and posts to the operations Slack channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: triage-incident
      description: Given a ServiceNow incident number and priority, fetch incident details, get the on-call engineer from PagerDuty, assign the ticket, and alert the operations Slack channel. Use for P1/P2 incidents on VMware, CA, or semiconductor product infrastructure.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow incident number, e.g. 'INC0099887'.
      - name: priority
        in: body
        type: string
        description: 'Incident priority: 1 (Critical), 2 (High).'
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: get-oncall
        type: call
        call: pagerduty.get-oncall-user
        with:
          schedule_id: $secrets.pagerduty_it_schedule_id
      - name: assign-incident
        type: call
        call: servicenow-assign.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          assigned_to: '{{get-oncall.user_email}}'
      - name: alert-ops
        type: call
        call: slack.post-message
        with:
          channel: it-incidents
          text: 'P{{priority}} {{incident_number}}: {{get-incident.short_description}} — assigned to {{get-oncall.user_name}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://broadcom.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: oncalls
      path: /oncalls
      operations:
      - name: get-oncall-user
        method: GET
  - type: http
    namespace: servicenow-assign
    baseUri: https://broadcom.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        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 → servicenow-incident-triage-and-on-call-routing.yml

Creates change for Terraform plan.

naftiko: '0.5'
info:
  label: Terraform Plan to Change
  description: Creates change for Terraform plan.
  tags:
  - infrastructure
  - itsm
  - terraform
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: terraform
    port: 8080
    tools:
    - name: terraform-plan-to-change
      description: Creates change for Terraform plan.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: infrastructure.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Terraform Plan to Change
  consumes:
  - type: http
    namespace: infrastructure
    baseUri: https://infrastructure.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.infrastructure_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → terraform-plan-to-change.yml

Updates ServiceNow change on PR merge.

naftiko: '0.5'
info:
  label: GitHub PR to ServiceNow Change
  description: Updates ServiceNow change on PR merge.
  tags:
  - devops
  - itsm
  - github
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: github-pr-to-servicenow-change
      description: Updates ServiceNow change on PR merge.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: github.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: GitHub PR to ServiceNow Change
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: GitHub PR to ServiceNow Change triggered
  consumes:
  - type: http
    namespace: github
    baseUri: https://github.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → github-pr-to-servicenow-change.yml

Creates Slack channel and pages.

naftiko: '0.5'
info:
  label: Major Incident Bridge
  description: Creates Slack channel and pages.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: major
    port: 8080
    tools:
    - name: major-incident-bridge
      description: Creates Slack channel and pages.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: servicenow.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Major Incident Bridge
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Major Incident Bridge triggered
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → major-incident-bridge.yml

Creates security incident from Splunk.

naftiko: '0.5'
info:
  label: Splunk Alert to Security Incident
  description: Creates security incident from Splunk.
  tags:
  - security
  - siem
  - splunk
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: splunk
    port: 8080
    tools:
    - name: splunk-alert-to-security-incident
      description: Creates security incident from Splunk.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: splunk.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Splunk Alert to Security Incident
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Splunk Alert to Security Incident triggered
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → splunk-alert-to-security-incident.yml

Syncs HubSpot marketing campaign contact lists to Salesforce campaign members, ensuring revenue attribution is accurate for closed-loop marketing reporting.

naftiko: '0.5'
info:
  label: HubSpot Marketing Campaign Sync to Salesforce
  description: Syncs HubSpot marketing campaign contact lists to Salesforce campaign members, ensuring revenue attribution is accurate for closed-loop marketing reporting.
  tags:
  - marketing
  - hubspot
  - salesforce
  - campaign-management
  - crm
capability:
  exposes:
  - type: mcp
    namespace: marketing-sync
    port: 8080
    tools:
    - name: sync-campaign-contacts
      description: Given a HubSpot campaign ID and corresponding Salesforce campaign ID, retrieve all campaign contacts from HubSpot and create or update matching Salesforce campaign members.
      inputParameters:
      - name: hubspot_campaign_id
        in: body
        type: string
        description: The HubSpot marketing campaign ID.
      - name: salesforce_campaign_id
        in: body
        type: string
        description: The Salesforce campaign record ID to sync members into.
      steps:
      - name: get-hubspot-contacts
        type: call
        call: hubspot.get-campaign-contacts
        with:
          campaign_id: '{{hubspot_campaign_id}}'
      - name: upsert-sf-members
        type: call
        call: salesforce.upsert-campaign-member
        with:
          campaign_id: '{{salesforce_campaign_id}}'
          contact_email: '{{get-hubspot-contacts.email}}'
          status: Sent
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaign-contacts
      path: /emails/{{campaign_id}}/statistics/list-level
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-contacts
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://cisco.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaign-members
      path: /sobjects/CampaignMember
      operations:
      - name: upsert-campaign-member
        method: POST
Open in Framework → View in Fleet → hubspot-marketing-campaign-sync-to-salesforce.yml

Triggers a Power BI dataset refresh for the executive business performance dashboard on a scheduled or on-demand basis, pulling data from Snowflake.

naftiko: '0.5'
info:
  label: Power BI Executive Dashboard Refresh
  description: Triggers a Power BI dataset refresh for the executive business performance dashboard on a scheduled or on-demand basis, pulling data from Snowflake.
  tags:
  - analytics
  - power-bi
  - snowflake
  - reporting
  - executive
capability:
  exposes:
  - type: mcp
    namespace: exec-analytics
    port: 8080
    tools:
    - name: refresh-exec-dashboard
      description: Trigger a Power BI dataset refresh for the executive dashboard. Use for scheduled refreshes or when urgent on-demand reporting is required by leadership.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID for the executive performance dashboard.
      call: powerbi.trigger-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: refresh_id
        type: string
        mapping: $.id
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-refreshes
      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-executive-dashboard-refresh.yml

Retrieves a Webex meeting recording transcript and publishes meeting notes as a Confluence page.

naftiko: '0.5'
info:
  label: Cisco Webex Meeting Summary to Confluence
  description: Retrieves a Webex meeting recording transcript and publishes meeting notes as a Confluence page.
  tags:
  - communication
  - documentation
  - cisco
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: meeting-notes
    port: 8080
    tools:
    - name: publish-meeting-notes
      description: Given a Webex meeting ID, retrieve transcript and create Confluence page.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: Webex meeting ID.
      steps:
      - name: get-transcript
        type: call
        call: webex.get-meeting-transcript
        with:
          meeting_id: '{{meeting_id}}'
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          title: 'Meeting Notes: {{get-transcript.subject}}'
          body: '## Summary

            {{get-transcript.summary}}'
  consumes:
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: meetings
      path: /meetings/{{meeting_id}}/transcripts
      operations:
      - name: get-meeting-transcript
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://cisco-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → cisco-webex-meeting-summary-to-confluence.yml

Creates page from transcript.

naftiko: '0.5'
info:
  label: Teams to Confluence
  description: Creates page from transcript.
  tags:
  - communication
  - documentation
  - microsoft-teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: teams
    port: 8080
    tools:
    - name: teams-to-confluence
      description: Creates page from transcript.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: microsoft-teams.get-data
        with:
          id: '{{input_id}}'
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          title: Teams to Confluence
  consumes:
  - type: http
    namespace: microsoft-teams
    baseUri: https://microsoft-teams.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.microsoft_teams_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://cisco-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → teams-to-confluence.yml

Publishes release notes.

naftiko: '0.5'
info:
  label: Jira Release to Confluence
  description: Publishes release notes.
  tags:
  - devops
  - documentation
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: jira
    port: 8080
    tools:
    - name: jira-release-to-confluence
      description: Publishes release notes.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: jira.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Jira Release to Confluence
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Jira Release to Confluence triggered
  consumes:
  - type: http
    namespace: jira
    baseUri: https://jira.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-release-to-confluence.yml

Queries GitHub Advanced Security for critical CVE findings across Cisco repositories and opens Jira security tickets for any unresolved critical vulnerabilities.

naftiko: '0.5'
info:
  label: GitHub Security Vulnerability Scanner
  description: Queries GitHub Advanced Security for critical CVE findings across Cisco repositories and opens Jira security tickets for any unresolved critical vulnerabilities.
  tags:
  - security
  - github
  - jira
  - vulnerability-management
  - devops
capability:
  exposes:
  - type: mcp
    namespace: security-scanning
    port: 8080
    tools:
    - name: scan-and-triage-vulnerabilities
      description: Query GitHub Advanced Security code scanning alerts for a repository and automatically create Jira security tickets for any critical or high severity findings not yet remediated.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: 'The GitHub repository to scan (format: org/repo).'
      - name: severity_filter
        in: body
        type: string
        description: 'Minimum severity to triage: critical, high, medium, or low.'
      steps:
      - name: get-alerts
        type: call
        call: github.get-code-scanning-alerts
        with:
          repo: '{{repo}}'
          severity: '{{severity_filter}}'
      - name: create-security-ticket
        type: call
        call: jira-security.create-issue
        with:
          project_key: SEC
          issuetype: Security
          summary: 'Vulnerability in {{repo}}: {{get-alerts.rule_name}}'
          description: 'CVE: {{get-alerts.cve_id}}

            Severity: {{get-alerts.severity}}

            File: {{get-alerts.location_path}}

            GitHub Alert: {{get-alerts.html_url}}'
  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
      - name: severity
        in: query
      operations:
      - name: get-code-scanning-alerts
        method: GET
  - type: http
    namespace: jira-security
    baseUri: https://cisco.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: security-issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-security-vulnerability-scanner.yml

When Datadog fires a critical alert, creates a ServiceNow P1 incident, pages the on-call team, and opens a Jira investigation ticket with full alert context.

naftiko: '0.5'
info:
  label: Datadog Incident Triage and Escalation
  description: When Datadog fires a critical alert, creates a ServiceNow P1 incident, pages the on-call team, and opens a Jira investigation ticket with full alert context.
  tags:
  - observability
  - datadog
  - servicenow
  - jira
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-datadog-alert
      description: Given a Datadog monitor ID and alert payload, create a ServiceNow P1 incident, open a linked Jira investigation issue, and notify the on-call team via Webex.
      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 human-readable name of the Datadog monitor.
      - name: host
        in: body
        type: string
        description: The affected host or service name.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: CRITICAL, WARNING, or INFO.'
      steps:
      - name: create-snow-incident
        type: call
        call: servicenow.create-p1-incident
        with:
          short_description: '[{{severity}}] Datadog Alert: {{monitor_name}} on {{host}}'
          category: monitoring
          priority: '1'
          assigned_group: NOC
      - name: create-jira-investigation
        type: call
        call: jira.create-issue
        with:
          project_key: OPS
          issuetype: Incident
          summary: 'Investigation: {{monitor_name}} - {{host}}'
          description: 'Datadog Monitor: {{monitor_id}}

            Severity: {{severity}}

            ServiceNow: {{create-snow-incident.number}}'
      - name: alert-oncall
        type: call
        call: webex.post-oncall-alert
        with:
          room_id: oncall-engineering
          markdown: '**P1 ALERT** | Monitor: {{monitor_name}} | Host: {{host}} | SNOW: {{create-snow-incident.number}} | Jira: {{create-jira-investigation.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cisco.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-p1-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://cisco.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: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: alert-messages
      path: /messages
      operations:
      - name: post-oncall-alert
        method: POST
Open in Framework → View in Fleet → datadog-incident-triage-and-escalation.yml

Compares ADP vs Workday.

naftiko: '0.5'
info:
  label: Payroll Audit
  description: Compares ADP vs Workday.
  tags:
  - hr
  - finance
  - adp
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: payroll-audit
      description: Compares ADP vs Workday.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: adp.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Payroll Audit
  consumes:
  - type: http
    namespace: adp
    baseUri: https://adp.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → payroll-audit.yml

Retrieves support case status.

naftiko: '0.5'
info:
  label: Salesforce Case Lookup
  description: Retrieves support case status.
  tags:
  - crm
  - support
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: support
    port: 8080
    tools:
    - name: get-case
      description: Given case number, return status.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: Case Number
      call: salesforce.get-case
      with:
        case_number: '{{case_number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://cisco.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /query
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → salesforce-case-lookup.yml

Retrieves SAP PO status.

naftiko: '0.5'
info:
  label: SAP Purchase Order Status
  description: Retrieves SAP PO status.
  tags:
  - finance
  - sap
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: erp
    port: 8080
    tools:
    - name: get-po
      description: Given PO number, return status.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: Po Number
      call: sap.get-po
      with:
        po_number: '{{po_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://cisco-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: pos
      path: /A_PurchaseOrder('{{po_number}}')
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-purchase-order-status.yml

Syncs groups on role change.

naftiko: '0.5'
info:
  label: Workday Role to Okta Groups
  description: Syncs groups on role change.
  tags:
  - hr
  - security
  - workday
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: workday-role-to-okta-groups
      description: Syncs groups on role change.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: workday.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Workday Role to Okta Groups
  consumes:
  - type: http
    namespace: workday
    baseUri: https://workday.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → workday-role-to-okta-groups.yml

Creates incident for down.

naftiko: '0.5'
info:
  label: SolarWinds to PagerDuty
  description: Creates incident for down.
  tags:
  - networking
  - incident-response
  - solarwinds
  - pagerduty
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: solarwinds
    port: 8080
    tools:
    - name: solarwinds-to-pagerduty
      description: Creates incident for down.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: solarwinds.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: SolarWinds to PagerDuty
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.solarwinds_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → solarwinds-to-pagerduty.yml

When ThousandEyes detects a network path degradation, creates a PagerDuty incident and posts to the NOC Slack channel.

naftiko: '0.5'
info:
  label: Cisco ThousandEyes Alert to PagerDuty
  description: When ThousandEyes detects a network path degradation, creates a PagerDuty incident and posts to the NOC Slack channel.
  tags:
  - networking
  - incident-response
  - cisco
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: noc-ops
    port: 8080
    tools:
    - name: handle-thousandeyes-alert
      description: Given a ThousandEyes alert ID, retrieve alert details and create PagerDuty incident.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: ThousandEyes alert ID.
      steps:
      - name: get-alert
        type: call
        call: thousandeyes.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: 'ThousandEyes: {{get-alert.ruleName}} — {{get-alert.testName}}'
          urgency: high
      - name: notify-noc
        type: call
        call: slack.post-message
        with:
          channel: '#noc'
          text: 'ThousandEyes alert: {{get-alert.ruleName}} — PagerDuty incident created'
  consumes:
  - type: http
    namespace: thousandeyes
    baseUri: https://api.thousandeyes.com/v7
    authentication:
      type: bearer
      token: $secrets.thousandeyes_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    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 → cisco-thousandeyes-alert-to-pagerduty.yml

Alerts low stock.

naftiko: '0.5'
info:
  label: SAP Stock Alert
  description: Alerts low stock.
  tags:
  - erp
  - supply-chain
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sap
    port: 8080
    tools:
    - name: sap-stock-alert-to-slack
      description: Alerts low stock.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: erp.get-data
        with:
          id: '{{input_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: SAP Stock Alert triggered
  consumes:
  - type: http
    namespace: erp
    baseUri: https://erp.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.erp_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        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 → sap-stock-alert.yml

Retrieves Meraki network device health status and creates a ServiceNow incident if connectivity drops below threshold.

naftiko: '0.5'
info:
  label: Cisco Meraki Device Health Check
  description: Retrieves Meraki network device health status and creates a ServiceNow incident if connectivity drops below threshold.
  tags:
  - networking
  - itsm
  - cisco
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: network-health
    port: 8080
    tools:
    - name: check-meraki-health
      description: Given a Meraki network ID, check device connectivity and create incident if degraded.
      inputParameters:
      - name: network_id
        in: body
        type: string
        description: Meraki network ID.
      steps:
      - name: get-devices
        type: call
        call: meraki.get-device-statuses
        with:
          network_id: '{{network_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Meraki device health: {{get-devices.offline_count}} offline in {{network_id}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#network-ops'
          text: 'Meraki health alert: {{get-devices.offline_count}} devices offline'
  consumes:
  - type: http
    namespace: meraki
    baseUri: https://api.meraki.com/api/v1
    authentication:
      type: apikey
      key: X-Cisco-Meraki-API-Key
      value: $secrets.meraki_api_key
      placement: header
    resources:
    - name: devices
      path: /networks/{{network_id}}/devices/statuses
      operations:
      - name: get-device-statuses
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.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
Open in Framework → View in Fleet → cisco-meraki-device-health-check.yml

Blocks and alerts.

naftiko: '0.5'
info:
  label: Cloudflare Block to PagerDuty
  description: Blocks and alerts.
  tags:
  - security
  - networking
  - cloudflare
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: cloudflare
    port: 8080
    tools:
    - name: cloudflare-block-to-pagerduty
      description: Blocks and alerts.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: cloudflare.get-data
        with:
          id: '{{input_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: Cloudflare Block to PagerDuty
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://cloudflare.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → cloudflare-block-to-pagerduty.yml

Executes Splunk SPL query.

naftiko: '0.5'
info:
  label: Splunk Search Runner
  description: Executes Splunk SPL query.
  tags:
  - security
  - observability
  - splunk
capability:
  exposes:
  - type: mcp
    namespace: log-analysis
    port: 8080
    tools:
    - name: run-search
      description: Given SPL query, execute.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Query
      call: splunk.create-search
      with:
        search: '{{query}}'
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.cisco.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
Open in Framework → View in Fleet → splunk-search-runner.yml

Triggers a Terraform Cloud workspace run for infrastructure changes and tracks the apply status, opening a ServiceNow change record if the run requires approval.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Deployment
  description: Triggers a Terraform Cloud workspace run for infrastructure changes and tracks the apply status, opening a ServiceNow change record if the run requires approval.
  tags:
  - cloud
  - terraform
  - servicenow
  - infrastructure
  - devops
capability:
  exposes:
  - type: mcp
    namespace: infra-deployment
    port: 8080
    tools:
    - name: trigger-terraform-deployment
      description: Given a Terraform Cloud workspace ID and message, trigger an infrastructure plan run. If the run requires manual approval, create a ServiceNow change request to gate the apply.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID to trigger a run for.
      - name: change_message
        in: body
        type: string
        description: Description of the infrastructure change being deployed.
      steps:
      - name: trigger-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: '{{change_message}}'
      - name: create-snow-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Terraform deployment: {{workspace_id}}'
          description: '{{change_message}}

            Terraform Run ID: {{trigger-run.run_id}}'
          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://cisco.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 → terraform-cloud-infrastructure-deployment.yml

Creates incident with runbook.

naftiko: '0.5'
info:
  label: Grafana to ServiceNow
  description: Creates incident with runbook.
  tags:
  - observability
  - itsm
  - grafana
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: grafana-alert-to-incident
      description: Creates incident with runbook.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: observability.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Grafana to ServiceNow
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          title: Grafana to ServiceNow
  consumes:
  - type: http
    namespace: observability
    baseUri: https://observability.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.observability_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://cisco-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → grafana-to-servicenow.yml

Retrieves current on-call engineer.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Lookup
  description: Retrieves current on-call engineer.
  tags:
  - operations
  - pagerduty
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: ops
    port: 8080
    tools:
    - name: get-on-call
      description: Given schedule ID, return on-call.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: Schedule Id
      call: pagerduty.get-on-call
      with:
        schedule_id: '{{schedule_id}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    resources:
    - name: schedules
      path: /schedules/{{schedule_id}}
      operations:
      - name: get-on-call
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-lookup.yml

Runs a network device compliance audit via Cisco DNA Center and creates ServiceNow tasks for non-compliant devices.

naftiko: '0.5'
info:
  label: Cisco DNA Center Compliance Audit
  description: Runs a network device compliance audit via Cisco DNA Center and creates ServiceNow tasks for non-compliant devices.
  tags:
  - networking
  - compliance
  - cisco
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: network-compliance
    port: 8080
    tools:
    - name: run-compliance-audit
      description: Given a site ID, run compliance check and create ServiceNow tasks for violations.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: DNA Center site ID.
      steps:
      - name: get-compliance
        type: call
        call: dnac.get-compliance
        with:
          site_id: '{{site_id}}'
      - name: create-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Network compliance: {{get-compliance.non_compliant_count}} devices non-compliant'
          assignment_group: Network_Engineering
  consumes:
  - type: http
    namespace: dnac
    baseUri: https://dnac.cisco.com/dna/intent/api/v1
    authentication:
      type: basic
      username: $secrets.dnac_user
      password: $secrets.dnac_password
    resources:
    - name: compliance
      path: /compliance
      operations:
      - name: get-compliance
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → cisco-dna-center-compliance-audit.yml

Retrieves Terraform workspace state.

naftiko: '0.5'
info:
  label: Terraform Workspace Status
  description: Retrieves Terraform workspace state.
  tags:
  - infrastructure
  - terraform
  - cloud
capability:
  exposes:
  - type: mcp
    namespace: infra
    port: 8080
    tools:
    - name: get-workspace
      description: Given workspace, return status.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: Workspace
      call: terraform.get-workspace
      with:
        workspace: '{{workspace}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/cisco/workspaces/{{workspace}}
      operations:
      - name: get-workspace
        method: GET
Open in Framework → View in Fleet → terraform-workspace-status.yml

Posts failure to Slack.

naftiko: '0.5'
info:
  label: GitHub Actions Failure
  description: Posts failure to Slack.
  tags:
  - devops
  - ci-cd
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: github
    port: 8080
    tools:
    - name: github-actions-failure-notify
      description: Posts failure to Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: github.get-data
        with:
          id: '{{input_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: GitHub Actions Failure triggered
  consumes:
  - type: http
    namespace: github
    baseUri: https://github.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        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-failure.yml

Retrieves Salesforce opportunity details.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Status
  description: Retrieves Salesforce opportunity details.
  tags:
  - crm
  - salesforce
  - sales
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-opportunity
      description: Given ID, return stage and amount.
      inputParameters:
      - name: opp_id
        in: body
        type: string
        description: Opp Id
      call: salesforce.get-opportunity
      with:
        id: '{{opp_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://cisco.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{id}}
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-opportunity-status.yml

Creates Jira bug for errors.

naftiko: '0.5'
info:
  label: New Relic Error to Jira
  description: Creates Jira bug for errors.
  tags:
  - observability
  - devops
  - new-relic
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: new
    port: 8080
    tools:
    - name: new-relic-error-to-jira
      description: Creates Jira bug for errors.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: observability.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: New Relic Error to Jira
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: New Relic Error to Jira triggered
  consumes:
  - type: http
    namespace: observability
    baseUri: https://observability.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.observability_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-relic-error-to-jira.yml

Executes read-only SQL against Snowflake.

naftiko: '0.5'
info:
  label: Snowflake Query Runner
  description: Executes read-only SQL against Snowflake.
  tags:
  - data
  - analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: run-query
      description: Given SQL, execute query.
      inputParameters:
      - name: sql
        in: body
        type: string
        description: Sql
      call: snowflake.execute-query
      with:
        statement: '{{sql}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cisco.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-query-runner.yml

Checks Power BI dataset refresh.

naftiko: '0.5'
info:
  label: Power BI Refresh Status
  description: Checks Power BI dataset refresh.
  tags:
  - analytics
  - reporting
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: reporting
    port: 8080
    tools:
    - name: get-refresh
      description: Given dataset ID, return status.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Dataset Id
      call: powerbi.get-refresh
      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: refreshes
      path: /datasets/{{dataset_id}}/refreshes
      operations:
      - name: get-refresh
        method: GET
Open in Framework → View in Fleet → power-bi-refresh-status.yml

Loads headcount snapshot.

naftiko: '0.5'
info:
  label: Workday Headcount to Snowflake
  description: Loads headcount snapshot.
  tags:
  - hr
  - data
  - workday
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: workday-headcount-to-snowflake
      description: Loads headcount snapshot.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: data.get-data
        with:
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: data
    baseUri: https://data.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.data_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → workday-headcount-to-snowflake.yml

Applies on approval.

naftiko: '0.5'
info:
  label: Change to Terraform Apply
  description: Applies on approval.
  tags:
  - itsm
  - infrastructure
  - servicenow
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: change
    port: 8080
    tools:
    - name: change-to-terraform-apply
      description: Applies on approval.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: infrastructure.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Change to Terraform Apply
  consumes:
  - type: http
    namespace: infrastructure
    baseUri: https://infrastructure.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.infrastructure_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → change-to-terraform-apply.yml

Creates Jira project on Closed-Won.

naftiko: '0.5'
info:
  label: Salesforce Won to Jira Project
  description: Creates Jira project on Closed-Won.
  tags:
  - crm
  - devops
  - salesforce
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: salesforce
    port: 8080
    tools:
    - name: salesforce-won-to-jira-project
      description: Creates Jira project on Closed-Won.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: salesforce.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Salesforce Won to Jira Project
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Salesforce Won to Jira Project triggered
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://salesforce.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-won-to-jira-project.yml

Pulls submitted expense reports from SAP Concur and flags policy violations, creating Jira audit tasks for the finance compliance team.

naftiko: '0.5'
info:
  label: Concur Travel Expense Policy Audit
  description: Pulls submitted expense reports from SAP Concur and flags policy violations, creating Jira audit tasks for the finance compliance team.
  tags:
  - finance
  - sap-concur
  - jira
  - expense-management
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: expense-audit
    port: 8080
    tools:
    - name: audit-expense-reports
      description: Retrieve submitted expense reports from SAP Concur for a given period and create Jira compliance tasks for any reports that exceed policy thresholds or contain flagged categories.
      inputParameters:
      - name: expense_period
        in: body
        type: string
        description: The expense reporting period to audit (e.g., '2026-03').
      - name: policy_threshold
        in: body
        type: number
        description: Single-transaction threshold in USD that triggers a policy flag.
      steps:
      - name: get-reports
        type: call
        call: concur.get-expense-reports
        with:
          period: '{{expense_period}}'
          exceeds_amount: '{{policy_threshold}}'
      - name: create-audit-task
        type: call
        call: jira.create-audit-issue
        with:
          project_key: FIN
          issuetype: Task
          summary: 'Expense audit flag: Period {{expense_period}} - {{get-reports.report_name}}'
          description: 'Report ID: {{get-reports.report_id}}

            Submitter: {{get-reports.submitted_by}}

            Amount: {{get-reports.total}}

            Policy Threshold: {{policy_threshold}}'
  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: period
        in: query
      - name: exceeds_amount
        in: query
      operations:
      - name: get-expense-reports
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: audit-issues
      path: /issue
      operations:
      - name: create-audit-issue
        method: POST
Open in Framework → View in Fleet → concur-travel-expense-policy-audit.yml

Loads invoices.

naftiko: '0.5'
info:
  label: Oracle Invoice to Snowflake
  description: Loads invoices.
  tags:
  - finance
  - data
  - oracle
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: oracle
    port: 8080
    tools:
    - name: oracle-invoice-to-snowflake
      description: Loads invoices.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: data.get-data
        with:
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: data
    baseUri: https://data.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.data_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → oracle-invoice-to-snowflake.yml

Creates ServiceNow problem for recurring bugs.

naftiko: '0.5'
info:
  label: Jira Bug to ServiceNow Problem
  description: Creates ServiceNow problem for recurring bugs.
  tags:
  - devops
  - itsm
  - jira
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: jira
    port: 8080
    tools:
    - name: jira-bug-to-servicenow-problem
      description: Creates ServiceNow problem for recurring bugs.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: jira.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Jira Bug to ServiceNow Problem
  consumes:
  - type: http
    namespace: jira
    baseUri: https://jira.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → jira-bug-to-servicenow-problem.yml

Posts message to Slack channel.

naftiko: '0.5'
info:
  label: Slack Message Poster
  description: Posts message to Slack channel.
  tags:
  - communication
  - slack
  - notifications
capability:
  exposes:
  - type: mcp
    namespace: messaging
    port: 8080
    tools:
    - name: post-message
      description: Given channel and text, post.
      inputParameters:
      - name: channel
        in: body
        type: string
        description: Channel
      call: slack.post-message
      with:
        channel: '{{channel}}'
  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-message-poster.yml

Runs data quality checks on Snowflake tables for enterprise data products, and opens a Jira data quality ticket when anomalies or null rate thresholds are breached.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Monitor
  description: Runs data quality checks on Snowflake tables for enterprise data products, and opens a Jira data quality ticket when anomalies or null rate thresholds are breached.
  tags:
  - data
  - snowflake
  - jira
  - data-quality
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Given a Snowflake table name and quality thresholds, execute a null rate and row count check and automatically open a Jira data quality incident if thresholds are breached.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: The fully qualified Snowflake table name (e.g., PROD.SALES.OPPORTUNITIES).
      - name: null_threshold_pct
        in: body
        type: number
        description: Maximum acceptable null rate percentage for key columns.
      steps:
      - name: check-quality
        type: call
        call: snowflake.run-quality-check
        with:
          table_name: '{{table_name}}'
          null_threshold: '{{null_threshold_pct}}'
      - name: create-dq-ticket
        type: call
        call: jira.create-dq-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'Data quality breach: {{table_name}}'
          description: 'Table: {{table_name}}

            Null Rate: {{check-quality.null_rate_pct}}%

            Row Count: {{check-quality.row_count}}

            Threshold: {{null_threshold_pct}}%'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://cisco.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: quality-checks
      path: /statements
      operations:
      - name: run-quality-check
        method: POST
  - type: http
    namespace: jira
    baseUri: https://cisco.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: dq-issues
      path: /issue
      operations:
      - name: create-dq-issue
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-monitor.yml

Creates Jira task for data anomalies.

naftiko: '0.5'
info:
  label: Snowflake Data Quality to Jira
  description: Creates Jira task for data anomalies.
  tags:
  - data
  - quality
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-quality-to-jira
      description: Creates Jira task for data anomalies.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: data.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Snowflake Data Quality to Jira
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Snowflake Data Quality to Jira triggered
  consumes:
  - type: http
    namespace: data
    baseUri: https://data.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.data_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-to-jira.yml

Queries Jira for all unestimated and stale backlog issues older than 30 days and posts a grooming agenda to the product team's Webex space.

naftiko: '0.5'
info:
  label: Jira Backlog Grooming Report
  description: Queries Jira for all unestimated and stale backlog issues older than 30 days and posts a grooming agenda to the product team's Webex space.
  tags:
  - devops
  - jira
  - webex
  - backlog-grooming
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: backlog-ops
    port: 8080
    tools:
    - name: publish-grooming-agenda
      description: Query Jira for stale, unestimated backlog issues on a given board and post a grooming agenda to the product team Webex space. Use before weekly grooming sessions.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID to audit the backlog for.
      - name: stale_days
        in: body
        type: integer
        description: Number of days without update to consider an issue stale.
      steps:
      - name: get-stale-issues
        type: call
        call: jira.search-issues
        with:
          board_id: '{{board_id}}'
          stale_days: '{{stale_days}}'
      - name: post-agenda
        type: call
        call: webex.post-grooming-agenda
        with:
          room_id: product-team
          markdown: '**Backlog Grooming Agenda** | Board: {{board_id}} | Stale issues (>{{stale_days}}d): {{get-stale-issues.count}} | Unestimated: {{get-stale-issues.unestimated_count}} | Top issues: {{get-stale-issues.summary}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://cisco.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: board_id
        in: query
      - name: stale_days
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: grooming-messages
      path: /messages
      operations:
      - name: post-grooming-agenda
        method: POST
Open in Framework → View in Fleet → jira-backlog-grooming-report.yml

Queries Azure cost for resource group.

naftiko: '0.5'
info:
  label: Azure Cost Lookup
  description: Queries Azure cost for resource group.
  tags:
  - cloud
  - finops
  - azure
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: get-cost
      description: Given subscription, return cost.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Subscription Id
      call: azure-cost.get-cost
      with:
        subscription_id: '{{subscription_id}}'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: cost
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query
      operations:
      - name: get-cost
        method: POST
Open in Framework → View in Fleet → azure-cost-lookup.yml

Retrieves Datadog monitor status.

naftiko: '0.5'
info:
  label: Datadog Monitor Lookup
  description: Retrieves Datadog monitor status.
  tags:
  - observability
  - datadog
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: monitoring
    port: 8080
    tools:
    - name: get-monitor
      description: Given monitor ID, return status.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Monitor Id
      call: datadog.get-monitor
      with:
        monitor_id: '{{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}}
      operations:
      - name: get-monitor
        method: GET
Open in Framework → View in Fleet → datadog-monitor-lookup.yml

Pulls weekly SLO compliance data from Datadog for all production services and posts a performance digest to the SRE team's Webex space.

naftiko: '0.5'
info:
  label: Datadog SLO Breach Weekly Digest
  description: Pulls weekly SLO compliance data from Datadog for all production services and posts a performance digest to the SRE team's Webex space.
  tags:
  - observability
  - datadog
  - webex
  - slo
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: slo-reporting
    port: 8080
    tools:
    - name: digest-slo-compliance
      description: Retrieve SLO compliance status from Datadog for all tracked services and post a weekly digest to the SRE Webex space, highlighting any breaches or at-risk services.
      inputParameters:
      - name: slo_tag
        in: body
        type: string
        description: The Datadog tag to filter SLOs by (e.g., team:sre, env:prod).
      - name: reporting_week
        in: body
        type: string
        description: The reporting week label (e.g., 'Week of 2026-03-17').
      steps:
      - name: get-slo-data
        type: call
        call: datadog.get-slo-list
        with:
          tags: '{{slo_tag}}'
      - name: post-digest
        type: call
        call: webex.post-slo-digest
        with:
          room_id: sre-team
          markdown: '**SLO Weekly Digest** | {{reporting_week}} | Total SLOs: {{get-slo-data.count}} | Compliant: {{get-slo-data.compliant_count}} | At Risk: {{get-slo-data.at_risk_count}} | Breached: {{get-slo-data.breached_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: slos
      path: /slo
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: get-slo-list
        method: GET
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: sre-messages
      path: /messages
      operations:
      - name: post-slo-digest
        method: POST
Open in Framework → View in Fleet → datadog-slo-breach-weekly-digest.yml

Syncs leads to Salesforce.

naftiko: '0.5'
info:
  label: HubSpot Lead to Salesforce
  description: Syncs leads to Salesforce.
  tags:
  - crm
  - marketing
  - hubspot
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hubspot
    port: 8080
    tools:
    - name: hubspot-lead-to-salesforce
      description: Syncs leads to Salesforce.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: hubspot.get-data
        with:
          id: '{{input_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: HubSpot Lead to Salesforce triggered
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://hubspot.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        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 → hubspot-lead-to-salesforce.yml

Retrieves ServiceNow incident details.

naftiko: '0.5'
info:
  label: ServiceNow Incident Status
  description: Retrieves ServiceNow incident details.
  tags:
  - itsm
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident
      description: Given number, return status.
      inputParameters:
      - name: number
        in: body
        type: string
        description: Number
      call: servicenow.get-incident
      with:
        number: '{{number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-status.yml

Loads review data.

naftiko: '0.5'
info:
  label: Access Review to Snowflake
  description: Loads review data.
  tags:
  - security
  - compliance
  - okta
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access
    port: 8080
    tools:
    - name: access-review-to-snowflake
      description: Loads review data.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: okta.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Access Review to Snowflake
  consumes:
  - type: http
    namespace: okta
    baseUri: https://okta.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → access-review-to-snowflake.yml

When a new lead arrives in Salesforce, enriches it with company data and routes it to the appropriate regional sales rep, notifying them via Webex.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment and Routing
  description: When a new lead arrives in Salesforce, enriches it with company data and routes it to the appropriate regional sales rep, notifying them via Webex.
  tags:
  - sales
  - salesforce
  - webex
  - lead-management
  - crm
capability:
  exposes:
  - type: mcp
    namespace: lead-management
    port: 8080
    tools:
    - name: enrich-and-route-lead
      description: Given a Salesforce lead ID, retrieve the lead record, update it with enriched account data, assign it to the correct sales rep based on territory, and notify the rep via Webex.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to enrich and route.
      steps:
      - name: get-lead
        type: call
        call: salesforce-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: update-lead
        type: call
        call: salesforce-update.update-lead
        with:
          lead_id: '{{lead_id}}'
          status: Assigned
          owner_id: $secrets.sales_team_default_owner
      - name: notify-rep
        type: call
        call: webex.notify-sales-rep
        with:
          room_id: sales-leads
          markdown: 'New Lead Assigned | **{{get-lead.company}}** | Contact: {{get-lead.first_name}} {{get-lead.last_name}} | Title: {{get-lead.title}} | Lead ID: {{lead_id}}'
  consumes:
  - type: http
    namespace: salesforce-lead
    baseUri: https://cisco.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-update
    baseUri: https://cisco.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: lead-updates
      path: /sobjects/Lead/{{lead_id}}
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: update-lead
        method: PATCH
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: sales-messages
      path: /messages
      operations:
      - name: notify-sales-rep
        method: POST
Open in Framework → View in Fleet → salesforce-lead-enrichment-and-routing.yml

Searches HubSpot for contact by email.

naftiko: '0.5'
info:
  label: HubSpot Contact Lookup
  description: Searches HubSpot for contact by email.
  tags:
  - crm
  - marketing
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: crm-marketing
    port: 8080
    tools:
    - name: search-contact
      description: Given email, find contact.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Email
      call: hubspot.search-contacts
      with:
        email: '{{email}}'
  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-contact-lookup.yml

Retrieves LinkedIn Sponsored Content campaign analytics for Cisco's employer branding initiatives and posts a weekly performance digest to the talent brand Webex space.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Campaign Tracker
  description: Retrieves LinkedIn Sponsored Content campaign analytics for Cisco's employer branding initiatives and posts a weekly performance digest to the talent brand Webex space.
  tags:
  - marketing
  - linkedin
  - webex
  - employer-brand
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: employer-brand
    port: 8080
    tools:
    - name: digest-linkedin-brand-performance
      description: Retrieve impressions, clicks, and follower growth from LinkedIn Campaign Manager for Cisco employer brand campaigns and post a weekly digest to the talent acquisition Webex space.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The LinkedIn Campaign Manager campaign ID.
      - name: reporting_week
        in: body
        type: string
        description: The reporting week label (e.g., 'Week of 2026-03-17').
      steps:
      - name: get-campaign-stats
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{campaign_id}}'
      - name: post-digest
        type: call
        call: webex.post-brand-digest
        with:
          room_id: talent-brand
          markdown: '**LinkedIn Brand Report** | {{reporting_week}} | Impressions: {{get-campaign-stats.impressions}} | Clicks: {{get-campaign-stats.clicks}} | CTR: {{get-campaign-stats.ctr}}% | Followers gained: {{get-campaign-stats.follower_growth}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalyticsV2
      inputParameters:
      - name: campaign_id
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: brand-messages
      path: /messages
      operations:
      - name: post-brand-digest
        method: POST
Open in Framework → View in Fleet → linkedin-employer-brand-campaign-tracker.yml

Retrieves EC2 instance state.

naftiko: '0.5'
info:
  label: AWS EC2 Instance Status
  description: Retrieves EC2 instance state.
  tags:
  - cloud
  - infrastructure
  - aws
capability:
  exposes:
  - type: mcp
    namespace: cloud-infra
    port: 8080
    tools:
    - name: get-ec2
      description: Given instance ID, return state.
      inputParameters:
      - name: instance_id
        in: body
        type: string
        description: Instance Id
      call: aws.describe-instance
      with:
        instance_id: '{{instance_id}}'
  consumes:
  - type: http
    namespace: aws
    baseUri: https://ec2.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sigv4_token
      placement: header
    resources:
    - name: instances
      path: /
      operations:
      - name: describe-instance
        method: GET
Open in Framework → View in Fleet → aws-ec2-instance-status.yml

Creates incident for failures.

naftiko: '0.5'
info:
  label: Tableau to ServiceNow
  description: Creates incident for failures.
  tags:
  - analytics
  - itsm
  - tableau
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: tableau
    port: 8080
    tools:
    - name: tableau-failure-to-incident
      description: Creates incident for failures.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: analytics.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Tableau to ServiceNow
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Tableau to ServiceNow triggered
  consumes:
  - type: http
    namespace: analytics
    baseUri: https://analytics.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → tableau-to-servicenow.yml

Creates compliance task.

naftiko: '0.5'
info:
  label: Concur Expense Violation
  description: Creates compliance task.
  tags:
  - finance
  - compliance
  - sap-concur
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: concur
    port: 8080
    tools:
    - name: concur-expense-violation
      description: Creates compliance task.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: sap-concur.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Concur Expense Violation
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Concur Expense Violation triggered
  consumes:
  - type: http
    namespace: sap-concur
    baseUri: https://sap-concur.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_concur_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → concur-expense-violation.yml

When a pull request is opened in a Cisco GitHub repository, identifies required reviewers and sends them a direct Webex message with PR context.

naftiko: '0.5'
info:
  label: GitHub Pull Request Code Review Notifier
  description: When a pull request is opened in a Cisco GitHub repository, identifies required reviewers and sends them a direct Webex message with PR context.
  tags:
  - devops
  - github
  - webex
  - code-review
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: code-review
    port: 8080
    tools:
    - name: notify-pr-reviewers
      description: Given a GitHub pull request URL and repository, retrieve PR details and send a targeted Webex notification to the assigned reviewers prompting timely code review.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in org/repo format.
      - name: pr_number
        in: body
        type: integer
        description: The pull request number.
      steps:
      - name: get-pr
        type: call
        call: github.get-pull-request
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
      - name: notify-reviewers
        type: call
        call: webex.send-pr-notification
        with:
          room_id: code-reviews
          markdown: '**PR Review Needed** | [{{get-pr.title}}]({{get-pr.html_url}}) | Repo: {{repo}} | Author: {{get-pr.author}} | Files changed: {{get-pr.changed_files}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{repo}}/pulls/{{pr_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: pr-messages
      path: /messages
      operations:
      - name: send-pr-notification
        method: POST
Open in Framework → View in Fleet → github-pull-request-code-review-notifier.yml

Lists DNS records for zone.

naftiko: '0.5'
info:
  label: Cloudflare DNS Records
  description: Lists DNS records for zone.
  tags:
  - networking
  - dns
  - cloudflare
capability:
  exposes:
  - type: mcp
    namespace: dns
    port: 8080
    tools:
    - name: list-records
      description: Given zone ID, return records.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Zone Id
      call: cloudflare.list-records
      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: dns-records
      path: /zones/{{zone_id}}/dns_records
      operations:
      - name: list-records
        method: GET
Open in Framework → View in Fleet → cloudflare-dns-records.yml

Suspends on risk.

naftiko: '0.5'
info:
  label: Entra Risk to Okta Suspend
  description: Suspends on risk.
  tags:
  - security
  - identity
  - azure
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: entra
    port: 8080
    tools:
    - name: entra-risk-to-okta-suspend
      description: Suspends on risk.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: identity.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Entra Risk to Okta Suspend
  consumes:
  - type: http
    namespace: identity
    baseUri: https://identity.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.identity_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → entra-risk-to-okta-suspend.yml

Posts runbook to Slack.

naftiko: '0.5'
info:
  label: Runbook from PagerDuty
  description: Posts runbook to Slack.
  tags:
  - operations
  - documentation
  - pagerduty
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: runbook
    port: 8080
    tools:
    - name: runbook-from-pagerduty
      description: Posts runbook to Slack.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: pagerduty.get-data
        with:
          id: '{{input_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: Runbook from PagerDuty
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Runbook from PagerDuty triggered
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://pagerduty.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    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 → runbook-from-pagerduty.yml

Creates tasks for violations.

naftiko: '0.5'
info:
  label: S3 Compliance Scan
  description: Creates tasks for violations.
  tags:
  - security
  - compliance
  - aws
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: s3
    port: 8080
    tools:
    - name: s3-compliance-scan
      description: Creates tasks for violations.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: aws.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: S3 Compliance Scan
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: S3 Compliance Scan triggered
  consumes:
  - type: http
    namespace: aws
    baseUri: https://aws.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → s3-compliance-scan.yml

Investigates and creates incident.

naftiko: '0.5'
info:
  label: Okta Risky Login
  description: Investigates and creates incident.
  tags:
  - security
  - identity
  - okta
  - splunk
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: okta
    port: 8080
    tools:
    - name: okta-risky-login-investigation
      description: Investigates and creates incident.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: identity.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Okta Risky Login
  consumes:
  - type: http
    namespace: identity
    baseUri: https://identity.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.identity_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → okta-risky-login.yml

Updates with delivery status.

naftiko: '0.5'
info:
  label: SAP Delivery to Salesforce
  description: Updates with delivery status.
  tags:
  - erp
  - crm
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sap
    port: 8080
    tools:
    - name: sap-delivery-to-salesforce
      description: Updates with delivery status.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: erp.get-data
        with:
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: erp
    baseUri: https://erp.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.erp_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → sap-delivery-to-salesforce.yml

Retrieves Confluence page by title.

naftiko: '0.5'
info:
  label: Confluence Page Search
  description: Retrieves Confluence page by title.
  tags:
  - knowledge
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: get-page
      description: Given title, return page.
      inputParameters:
      - name: title
        in: body
        type: string
        description: Title
      call: confluence.get-page
      with:
        title: '{{title}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://cisco-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-page-search.yml

Enrolls expiring contracts.

naftiko: '0.5'
info:
  label: Contract to HubSpot Nurture
  description: Enrolls expiring contracts.
  tags:
  - crm
  - marketing
  - salesforce
  - hubspot
  - slack
capability:
  exposes:
  - type: mcp
    namespace: contract
    port: 8080
    tools:
    - name: contract-to-hubspot-nurture
      description: Enrolls expiring contracts.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: salesforce.get-data
        with:
          id: '{{input_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Contract to HubSpot Nurture triggered
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://salesforce.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        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 → contract-to-hubspot-nurture.yml

Deactivates Okta user on Workday termination and creates ServiceNow task.

naftiko: '0.5'
info:
  label: Workday Termination to Okta Deprovisioning
  description: Deactivates Okta user on Workday termination and creates ServiceNow task.
  tags:
  - hr
  - security
  - workday
  - okta
  - servicenow
  - offboarding
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: workday-termination-to-okta-deprovisioning
      description: Deactivates Okta user on Workday termination and creates ServiceNow task.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: workday.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Workday Termination to Okta Deprovisioning
  consumes:
  - type: http
    namespace: workday
    baseUri: https://workday.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → workday-termination-to-okta-deprovisioning.yml

Creates a structured Confluence knowledge base article from a ServiceNow resolved incident or problem record, maintaining institutional knowledge of recurring issues.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Article Publisher
  description: Creates a structured Confluence knowledge base article from a ServiceNow resolved incident or problem record, maintaining institutional knowledge of recurring issues.
  tags:
  - itsm
  - servicenow
  - confluence
  - knowledge-management
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: knowledge-mgmt
    port: 8080
    tools:
    - name: publish-kb-article
      description: Given a resolved ServiceNow incident number, retrieve the full resolution details and create a structured Confluence knowledge base article in the IT Operations space.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The resolved ServiceNow incident number to document.
      - name: confluence_space_key
        in: body
        type: string
        description: The Confluence space key for the IT knowledge base (e.g., ITKB).
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_number: '{{incident_number}}'
      - name: create-article
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          title: 'KB: {{get-incident.short_description}}'
          body: '**Incident:** {{incident_number}}

            **Category:** {{get-incident.category}}

            **Resolution:** {{get-incident.close_notes}}

            **Cause:** {{get-incident.cause}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cisco.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: confluence
    baseUri: https://cisco.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
Open in Framework → View in Fleet → confluence-knowledge-base-article-publisher.yml

Creates incident for problems.

naftiko: '0.5'
info:
  label: Dynatrace to ServiceNow
  description: Creates incident for problems.
  tags:
  - observability
  - itsm
  - dynatrace
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: dynatrace
    port: 8080
    tools:
    - name: dynatrace-to-servicenow
      description: Creates incident for problems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: observability.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Dynatrace to ServiceNow
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Dynatrace to ServiceNow triggered
  consumes:
  - type: http
    namespace: observability
    baseUri: https://observability.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.observability_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → dynatrace-to-servicenow.yml

Creates a new Jira sprint for a given board, populates it with backlog issues meeting priority criteria, and notifies the product team via Webex.

naftiko: '0.5'
info:
  label: Jira Sprint Planning Kickoff
  description: Creates a new Jira sprint for a given board, populates it with backlog issues meeting priority criteria, and notifies the product team via Webex.
  tags:
  - devops
  - jira
  - webex
  - sprint-planning
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: sprint-planning
    port: 8080
    tools:
    - name: kickoff-sprint
      description: Given a Jira board ID and sprint name, create a new sprint, move the top prioritized backlog issues into it, and notify the product team via Webex that planning is ready.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID to create the sprint on.
      - name: sprint_name
        in: body
        type: string
        description: The name for the new sprint (e.g., 'Sprint 42 - Networking Platform').
      - name: start_date
        in: body
        type: string
        description: Sprint start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Sprint end date in YYYY-MM-DD format.
      steps:
      - name: create-sprint
        type: call
        call: jira.create-sprint
        with:
          board_id: '{{board_id}}'
          name: '{{sprint_name}}'
          startDate: '{{start_date}}'
          endDate: '{{end_date}}'
      - name: notify-team
        type: call
        call: webex.post-sprint-kickoff
        with:
          room_id: product-team
          markdown: '**Sprint Created** | {{sprint_name}} | Board: {{board_id}} | Start: {{start_date}} | End: {{end_date}} | Sprint ID: {{create-sprint.id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://cisco.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /sprint
      operations:
      - name: create-sprint
        method: POST
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: team-messages
      path: /messages
      operations:
      - name: post-sprint-kickoff
        method: POST
Open in Framework → View in Fleet → jira-sprint-planning-kickoff.yml

When a Salesforce opportunity moves to Closed Won, automatically creates a Jira project for delivery tracking and notifies the delivery team via Webex.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to Jira Project Sync
  description: When a Salesforce opportunity moves to Closed Won, automatically creates a Jira project for delivery tracking and notifies the delivery team via Webex.
  tags:
  - sales
  - salesforce
  - jira
  - webex
  - crm
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: sales-delivery
    port: 8080
    tools:
    - name: sync-won-opportunity
      description: Given a Salesforce opportunity ID that has closed as Won, create a Jira delivery project, link the opportunity, and notify the delivery team in Webex.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID for the closed-won deal.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-project
        type: call
        call: jira.create-project
        with:
          name: '{{get-opportunity.account_name}} - {{get-opportunity.name}}'
          project_type_key: software
          lead_account_id: $secrets.jira_delivery_lead_id
      - name: notify-delivery
        type: call
        call: webex.post-message
        with:
          room_id: delivery-team
          markdown: 'New Delivery Project Created | **{{get-opportunity.account_name}}** | Deal: {{get-opportunity.name}} | Value: {{get-opportunity.amount}} | Jira: {{create-project.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://cisco.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: jira
    baseUri: https://cisco.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: projects
      path: /project
      operations:
      - name: create-project
        method: POST
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: messages
      path: /messages
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-to-jira-project-sync.yml

Creates incident for alarms.

naftiko: '0.5'
info:
  label: CloudWatch to ServiceNow
  description: Creates incident for alarms.
  tags:
  - cloud
  - itsm
  - aws
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cloudwatch
    port: 8080
    tools:
    - name: cloudwatch-alarm-to-incident
      description: Creates incident for alarms.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: aws.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: CloudWatch to ServiceNow
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: CloudWatch to ServiceNow triggered
  consumes:
  - type: http
    namespace: aws
    baseUri: https://aws.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → cloudwatch-to-servicenow.yml

Creates postmortem page.

naftiko: '0.5'
info:
  label: PagerDuty to Confluence Postmortem
  description: Creates postmortem page.
  tags:
  - operations
  - documentation
  - pagerduty
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pagerduty
    port: 8080
    tools:
    - name: pagerduty-to-confluence-postmortem
      description: Creates postmortem page.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: pagerduty.get-data
        with:
          id: '{{input_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: PagerDuty to Confluence Postmortem
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: PagerDuty to Confluence Postmortem triggered
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://pagerduty.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    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 → pagerduty-to-confluence-postmortem.yml

Queries Salesforce for enterprise customer renewal opportunities closing within 90 days and posts a prioritized renewal alert to the account management Webex space.

naftiko: '0.5'
info:
  label: Salesforce Renewal Opportunity Alert
  description: Queries Salesforce for enterprise customer renewal opportunities closing within 90 days and posts a prioritized renewal alert to the account management Webex space.
  tags:
  - sales
  - salesforce
  - webex
  - renewals
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: renewal-management
    port: 8080
    tools:
    - name: alert-renewal-opportunities
      description: Query Salesforce for all renewal opportunities closing within 90 days and post a sorted summary to the account management Webex space for proactive outreach planning.
      inputParameters:
      - name: close_within_days
        in: body
        type: integer
        description: Number of days ahead to filter renewal close dates (e.g., 90).
      - name: min_arr
        in: body
        type: number
        description: Minimum annual recurring revenue in USD to include in the alert.
      steps:
      - name: get-renewals
        type: call
        call: salesforce.get-renewal-opportunities
        with:
          close_within_days: '{{close_within_days}}'
          min_arr: '{{min_arr}}'
      - name: post-alert
        type: call
        call: webex.post-renewal-alert
        with:
          room_id: account-management
          markdown: '**Renewal Alert** | Closing within {{close_within_days}} days | Count: {{get-renewals.count}} | Total ARR at risk: {{get-renewals.total_arr}} | Top account: {{get-renewals.top_account}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://cisco.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: renewal-opportunities
      path: /query
      inputParameters:
      - name: close_within_days
        in: query
      - name: min_arr
        in: query
      operations:
      - name: get-renewal-opportunities
        method: GET
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: renewal-messages
      path: /messages
      operations:
      - name: post-renewal-alert
        method: POST
Open in Framework → View in Fleet → salesforce-renewal-opportunity-alert.yml

Creates FinOps ticket.

naftiko: '0.5'
info:
  label: Azure Cost Anomaly to Jira
  description: Creates FinOps ticket.
  tags:
  - cloud
  - finops
  - azure
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: azure
    port: 8080
    tools:
    - name: azure-cost-anomaly-to-jira
      description: Creates FinOps ticket.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: azure.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Azure Cost Anomaly to Jira
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Azure Cost Anomaly to Jira triggered
  consumes:
  - type: http
    namespace: azure
    baseUri: https://azure.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → azure-cost-anomaly-to-jira.yml

Reminds unenrolled employees.

naftiko: '0.5'
info:
  label: Benefits Enrollment Reminder
  description: Reminds unenrolled employees.
  tags:
  - hr
  - workday
  - servicenow
  - slack
  - benefits
capability:
  exposes:
  - type: mcp
    namespace: benefits
    port: 8080
    tools:
    - name: benefits-enrollment-reminder
      description: Reminds unenrolled employees.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: workday.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Benefits Enrollment Reminder
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Benefits Enrollment Reminder triggered
  consumes:
  - type: http
    namespace: workday
    baseUri: https://workday.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → benefits-enrollment-reminder.yml

Updates on completion.

naftiko: '0.5'
info:
  label: Epic to Salesforce
  description: Updates on completion.
  tags:
  - devops
  - crm
  - jira
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: epic
    port: 8080
    tools:
    - name: epic-to-salesforce
      description: Updates on completion.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: jira.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Epic to Salesforce
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Epic to Salesforce triggered
  consumes:
  - type: http
    namespace: jira
    baseUri: https://jira.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → epic-to-salesforce.yml

Lists Okta groups for a user.

naftiko: '0.5'
info:
  label: Okta User Groups Lookup
  description: Lists Okta groups for a user.
  tags:
  - security
  - identity
  - okta
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-groups
      description: Given email, return groups.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Email
      call: okta.get-user-groups
      with:
        user_id: '{{email}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://cisco.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: SSWS $secrets.okta_api_token
      placement: header
    resources:
    - name: groups
      path: /users/{{user_id}}/groups
      operations:
      - name: get-user-groups
        method: GET
Open in Framework → View in Fleet → okta-user-groups-lookup.yml

When a P1 incident is resolved in ServiceNow, uses the Anthropic API to generate a root cause analysis summary from the incident timeline and posts it to the Webex incident channel.

naftiko: '0.5'
info:
  label: AI-Assisted Incident Root Cause Summarizer
  description: When a P1 incident is resolved in ServiceNow, uses the Anthropic API to generate a root cause analysis summary from the incident timeline and posts it to the Webex incident channel.
  tags:
  - ai
  - servicenow
  - webex
  - anthropic
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: incident-ai
    port: 8080
    tools:
    - name: generate-rca-summary
      description: Given a resolved ServiceNow P1 incident number, retrieve incident notes and timeline, then use Claude to draft a structured root cause analysis summary and post it to the incident Webex space.
      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-details
        with:
          incident_number: '{{incident_number}}'
      - name: generate-rca
        type: call
        call: anthropic.create-message
        with:
          model: claude-3-5-sonnet-20241022
          prompt: 'Write a structured root cause analysis for this incident. Summary: {{get-incident.short_description}}. Notes: {{get-incident.work_notes}}. Duration: {{get-incident.resolution_time}}. Format as: Incident Summary, Root Cause, Timeline, Impact, Remediation Steps, Prevention.'
      - name: post-rca
        type: call
        call: webex.post-rca
        with:
          room_id: incident-post-mortem
          markdown: '**RCA Complete: {{incident_number}}** | {{get-incident.short_description}}


            {{generate-rca.content}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident-details
      path: /table/incident/{{incident_number}}
      inputParameters:
      - name: incident_number
        in: path
      operations:
      - name: get-incident-details
        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: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: rca-messages
      path: /messages
      operations:
      - name: post-rca
        method: POST
Open in Framework → View in Fleet → ai-assisted-incident-root-cause-summarizer.yml

Creates ticket for latency.

naftiko: '0.5'
info:
  label: Latency Spike to Jira
  description: Creates ticket for latency.
  tags:
  - observability
  - devops
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: latency
    port: 8080
    tools:
    - name: latency-spike-to-jira
      description: Creates ticket for latency.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: observability.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Latency Spike to Jira
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Latency Spike to Jira triggered
  consumes:
  - type: http
    namespace: observability
    baseUri: https://observability.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.observability_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → latency-spike-to-jira.yml

Refreshes dashboard.

naftiko: '0.5'
info:
  label: Compensation to Power BI
  description: Refreshes dashboard.
  tags:
  - hr
  - analytics
  - workday
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: comp
    port: 8080
    tools:
    - name: comp-review-to-power-bi
      description: Refreshes dashboard.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: analytics.get-data
        with:
          id: '{{input_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Compensation to Power BI triggered
  consumes:
  - type: http
    namespace: analytics
    baseUri: https://analytics.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        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 → compensation-to-power-bi.yml

Refreshes and distributes.

naftiko: '0.5'
info:
  label: Power BI Distribution
  description: Refreshes and distributes.
  tags:
  - analytics
  - reporting
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: power
    port: 8080
    tools:
    - name: power-bi-distribution
      description: Refreshes and distributes.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: analytics.get-data
        with:
          id: '{{input_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Power BI Distribution triggered
  consumes:
  - type: http
    namespace: analytics
    baseUri: https://analytics.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        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 → power-bi-distribution.yml

Retrieves Dynatrace problem details.

naftiko: '0.5'
info:
  label: Dynatrace Problem Lookup
  description: Retrieves Dynatrace problem details.
  tags:
  - observability
  - dynatrace
  - apm
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-problem
      description: Given problem ID, return details.
      inputParameters:
      - name: problem_id
        in: body
        type: string
        description: Problem Id
      call: dynatrace.get-problem
      with:
        problem_id: '{{problem_id}}'
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://cisco.live.dynatrace.com/api/v2
    authentication:
      type: apikey
      key: Authorization
      value: Api-Token $secrets.dynatrace_token
      placement: header
    resources:
    - name: problems
      path: /problems/{{problem_id}}
      operations:
      - name: get-problem
        method: GET
Open in Framework → View in Fleet → dynatrace-problem-lookup.yml

Creates Jira for failures.

naftiko: '0.5'
info:
  label: Databricks Failure to Jira
  description: Creates Jira for failures.
  tags:
  - data
  - devops
  - azure-databricks
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: databricks
    port: 8080
    tools:
    - name: databricks-failure-to-jira
      description: Creates Jira for failures.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: data.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Databricks Failure to Jira
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Databricks Failure to Jira triggered
  consumes:
  - type: http
    namespace: data
    baseUri: https://data.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.data_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → databricks-failure-to-jira.yml

Creates task for vulnerabilities.

naftiko: '0.5'
info:
  label: Dependabot to Jira Security
  description: Creates task for vulnerabilities.
  tags:
  - security
  - devops
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: dependabot
    port: 8080
    tools:
    - name: dependabot-to-jira-security
      description: Creates task for vulnerabilities.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: github.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Dependabot to Jira Security
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Dependabot to Jira Security triggered
  consumes:
  - type: http
    namespace: github
    baseUri: https://github.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → dependabot-to-jira-security.yml

Compares Terraform and CMDB.

naftiko: '0.5'
info:
  label: CMDB Drift Detection
  description: Compares Terraform and CMDB.
  tags:
  - itsm
  - infrastructure
  - servicenow
  - terraform
  - governance
capability:
  exposes:
  - type: mcp
    namespace: cmdb
    port: 8080
    tools:
    - name: cmdb-drift-detection
      description: Compares Terraform and CMDB.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: infrastructure.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: CMDB Drift Detection
  consumes:
  - type: http
    namespace: infrastructure
    baseUri: https://infrastructure.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.infrastructure_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → cmdb-drift-detection.yml

Creates bug for failures.

naftiko: '0.5'
info:
  label: Azure DevOps to Jira
  description: Creates bug for failures.
  tags:
  - devops
  - ci-cd
  - azure-devops
  - jira
capability:
  exposes:
  - type: mcp
    namespace: azure
    port: 8080
    tools:
    - name: azure-devops-failure-to-jira
      description: Creates bug for failures.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: azure-devops.get-data
        with:
          id: '{{input_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          summary: Azure DevOps to Jira
  consumes:
  - type: http
    namespace: azure-devops
    baseUri: https://azure-devops.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.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 → azure-devops-to-jira.yml

Retrieves app health from New Relic.

naftiko: '0.5'
info:
  label: New Relic App Health
  description: Retrieves app health from New Relic.
  tags:
  - observability
  - new-relic
  - apm
capability:
  exposes:
  - type: mcp
    namespace: app-health
    port: 8080
    tools:
    - name: get-health
      description: Given app name, return health.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: App Name
      call: newrelic.get-app
      with:
        name: '{{app_name}}'
  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: applications
      path: /applications.json
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → new-relic-app-health.yml

Retrieves all pending change requests from ServiceNow awaiting CAB approval and posts a summary to the change management Webex space.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Approval Tracker
  description: Retrieves all pending change requests from ServiceNow awaiting CAB approval and posts a summary to the change management Webex space.
  tags:
  - itsm
  - servicenow
  - webex
  - change-management
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: digest-pending-changes
      description: Retrieve all ServiceNow change requests currently in the scheduled or pending CAB approval state and post a digest to the change management Webex space.
      inputParameters:
      - name: change_window
        in: body
        type: string
        description: The change window date in YYYY-MM-DD format to filter relevant changes.
      steps:
      - name: get-pending-changes
        type: call
        call: servicenow.get-pending-changes
        with:
          planned_date: '{{change_window}}'
      - name: post-digest
        type: call
        call: webex.post-change-digest
        with:
          room_id: change-management
          markdown: '**Change Request Digest** | Window: {{change_window}} | Pending: {{get-pending-changes.count}} changes | Risk breakdown: {{get-pending-changes.risk_summary}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      inputParameters:
      - name: planned_date
        in: query
      operations:
      - name: get-pending-changes
        method: GET
  - type: http
    namespace: webex
    baseUri: https://webexapis.com/v1
    authentication:
      type: bearer
      token: $secrets.webex_token
    resources:
    - name: change-messages
      path: /messages
      operations:
      - name: post-change-digest
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-approval-tracker.yml

Provisions Okta for new hires.

naftiko: '0.5'
info:
  label: Workday New Hire to Okta
  description: Provisions Okta for new hires.
  tags:
  - hr
  - security
  - workday
  - okta
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: workday
    port: 8080
    tools:
    - name: workday-new-hire-to-okta
      description: Provisions Okta for new hires.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: workday.get-data
        with:
          id: '{{input_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://workday.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
Open in Framework → View in Fleet → workday-new-hire-to-okta.yml

Notifies at-risk renewals.

naftiko: '0.5'
info:
  label: Salesforce Renewal Risk
  description: Notifies at-risk renewals.
  tags:
  - crm
  - sales
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: salesforce
    port: 8080
    tools:
    - name: salesforce-renewal-risk
      description: Notifies at-risk renewals.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: salesforce.get-data
        with:
          id: '{{input_id}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Salesforce Renewal Risk triggered
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://salesforce.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        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 → salesforce-renewal-risk.yml

Resets MFA and closes ticket.

naftiko: '0.5'
info:
  label: Okta MFA Reset with ServiceNow
  description: Resets MFA and closes ticket.
  tags:
  - security
  - identity
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: okta
    port: 8080
    tools:
    - name: okta-mfa-reset-servicenow
      description: Resets MFA and closes ticket.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: identity.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Okta MFA Reset with ServiceNow
  consumes:
  - type: http
    namespace: identity
    baseUri: https://identity.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.identity_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → okta-mfa-reset-with-servicenow.yml

Creates PagerDuty incident and notifies Slack on critical.

naftiko: '0.5'
info:
  label: Datadog Alert to PagerDuty and Slack
  description: Creates PagerDuty incident and notifies Slack on critical.
  tags:
  - observability
  - incident-response
  - datadog
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: datadog
    port: 8080
    tools:
    - name: datadog-alert-to-pagerduty-slack
      description: Creates PagerDuty incident and notifies Slack on critical.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: observability.get-data
        with:
          id: '{{input_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: Datadog Alert to PagerDuty and Slack
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Datadog Alert to PagerDuty and Slack triggered
  consumes:
  - type: http
    namespace: observability
    baseUri: https://observability.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.observability_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    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 → datadog-alert-to-pagerduty-and-slack.yml

Alerts on credit overage.

naftiko: '0.5'
info:
  label: Snowflake Cost Alert
  description: Alerts on credit overage.
  tags:
  - data
  - finops
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-cost-to-finops
      description: Alerts on credit overage.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: Input identifier.
      steps:
      - name: get-data
        type: call
        call: data.get-data
        with:
          id: '{{input_id}}'
      - name: create-record
        type: call
        call: servicenow.create-record
        with:
          short_description: Snowflake Cost Alert
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#alerts'
          text: Snowflake Cost Alert triggered
  consumes:
  - type: http
    namespace: data
    baseUri: https://data.cisco.com/api/v1
    authentication:
      type: bearer
      token: $secrets.data_token
    resources:
    - name: data
      path: /data
      operations:
      - name: get-data
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://cisco.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/incident
      operations:
      - name: create-record
        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 → snowflake-cost-alert.yml

Retrieves Jira issue status and assignee.

naftiko: '0.5'
info:
  label: Jira Issue Status Lookup
  description: Retrieves Jira issue status and assignee.
  tags:
  - devops
  - jira
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: project-mgmt
    port: 8080
    tools:
    - name: get-issue
      description: Given issue key, return status.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Issue Key
      call: jira.get-issue
      with:
        issue_key: '{{issue_key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://cisco-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue/{{issue_key}}
      operations:
      - name: get-issue
        method: GET
Open in Framework → View in Fleet → jira-issue-status-lookup.yml

Retrieves material master data from SAP S/4HANA by material number for procurement and inventory queries.

naftiko: '0.5'
info:
  label: SAP Material Master Lookup
  description: Retrieves material master data from SAP S/4HANA by material number for procurement and inventory queries.
  tags:
  - erp
  - sap
  - materials
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: erp
    port: 8080
    tools:
    - name: get-material-master
      description: Given a SAP material number, retrieve the material description, unit of measure, and material group.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number to look up.
      call: sap.get-material
      with:
        Material: '{{material_number}}'
      outputParameters:
      - name: material_description
        type: string
        mapping: $.d.MaterialName
      - name: base_unit
        type: string
        mapping: $.d.BaseUnit
      - name: material_group
        type: string
        mapping: $.d.MaterialGroup
  consumes:
  - type: http
    namespace: sap
    baseUri: https://dell-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: products
      path: /A_Product('{{Material}}')
      inputParameters:
      - name: Material
        in: path
      operations:
      - name: get-material
        method: GET
Open in Framework → View in Fleet → sap-material-master-lookup.yml

Checks the current power state of an Azure virtual machine for infrastructure status monitoring.

naftiko: '0.5'
info:
  label: Azure VM Power State Check
  description: Checks the current power state of an Azure virtual machine for infrastructure status monitoring.
  tags:
  - cloud
  - azure
  - compute
capability:
  exposes:
  - type: mcp
    namespace: cloud
    port: 8080
    tools:
    - name: get-vm-power-state
      description: Given a subscription, resource group, and VM name, return the current power state.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Azure resource group name.
      - name: vm_name
        in: body
        type: string
        description: Azure virtual machine name.
      call: azure.get-vm-status
      with:
        subscriptionId: '{{subscription_id}}'
        resourceGroupName: '{{resource_group}}'
        vmName: '{{vm_name}}'
      outputParameters:
      - name: power_state
        type: string
        mapping: $.statuses[1].displayStatus
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: virtual-machines
      path: /subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Compute/virtualMachines/{{vmName}}/instanceView
      inputParameters:
      - name: subscriptionId
        in: path
      - name: resourceGroupName
        in: path
      - name: vmName
        in: path
      operations:
      - name: get-vm-status
        method: GET
Open in Framework → View in Fleet → azure-vm-power-state-check.yml

When an Azure DevOps pipeline build fails, creates a Jira bug and notifies the development team in Microsoft Teams with build logs.

naftiko: '0.5'
info:
  label: Azure DevOps Build Failure Notification
  description: When an Azure DevOps pipeline build fails, creates a Jira bug and notifies the development team in Microsoft Teams with build logs.
  tags:
  - devops
  - azure-devops
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: ci-cd
    port: 8080
    tools:
    - name: handle-build-failure
      description: Given an Azure DevOps build ID and pipeline name, create a Jira bug and notify dev team.
      inputParameters:
      - name: build_id
        in: body
        type: string
        description: Azure DevOps build ID.
      - name: pipeline_name
        in: body
        type: string
        description: Pipeline name.
      - name: error_log
        in: body
        type: string
        description: Build error log excerpt.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: DEV
          issuetype: Bug
          summary: 'Build Failure: {{pipeline_name}} #{{build_id}}'
          description: '{{error_log}}'
      - name: notify-dev
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_dev_team_id
          channel_id: $secrets.teams_builds_channel_id
          text: 'Build Failed: {{pipeline_name}} #{{build_id}} | Jira: {{create-bug.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → azure-devops-build-failure-notification.yml

Triggers a Power BI dataset refresh for the global sales performance report after Snowflake data pipelines complete, ensuring current revenue data is available to sales leadership.

naftiko: '0.5'
info:
  label: Power BI Sales Performance Report Refresh
  description: Triggers a Power BI dataset refresh for the global sales performance report after Snowflake data pipelines complete, ensuring current revenue data is available to sales leadership.
  tags:
  - analytics
  - sales
  - power-bi
  - snowflake
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bi-reporting
    port: 8080
    tools:
    - name: refresh-sales-performance-report
      description: Given a Power BI dataset ID and reporting period, trigger a dataset refresh so the global sales performance report reflects the latest Snowflake pipeline data.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID to refresh.
      - name: reporting_period
        in: body
        type: string
        description: Reporting period label for logging (e.g. Q1-2026).
      steps:
      - name: verify-data-load
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT MAX(loaded_at) as last_load FROM pipeline_audit WHERE pipeline = 'sales_data' AND status = 'success'
      - name: trigger-refresh
        type: call
        call: powerbi.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://dell.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 → power-bi-sales-performance-report-refresh.yml

When a Salesforce CPQ quote is approved, generates a contract document and sends it for electronic signature, then updates Salesforce.

naftiko: '0.5'
info:
  label: Salesforce Quote Approval to Contract Send
  description: When a Salesforce CPQ quote is approved, generates a contract document and sends it for electronic signature, then updates Salesforce.
  tags:
  - quote-to-cash
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quote-to-cash
    port: 8080
    tools:
    - name: send-quote-for-signature
      description: Given an approved Salesforce quote, send for electronic signature and update records.
      inputParameters:
      - name: quote_id
        in: body
        type: string
        description: Salesforce quote ID.
      - name: account_name
        in: body
        type: string
        description: Account name.
      - name: quote_amount
        in: body
        type: number
        description: Quote total amount.
      steps:
      - name: update-sf
        type: call
        call: salesforce.update-quote
        with:
          id: '{{quote_id}}'
          Status: Sent for Signature
      - name: notify-sales
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_sales_team_id
          channel_id: $secrets.teams_deals_channel_id
          text: 'Quote sent for signature: {{account_name}} | ${{quote_amount}} | Quote: {{quote_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: quotes
      path: /sobjects/Quote/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-quote
        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-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-quote-approval-to-contract-send.yml

When GitHub code scanning finds a high-severity issue, creates a Jira remediation ticket and notifies the security champions in Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Code Scanning to Jira Remediation
  description: When GitHub code scanning finds a high-severity issue, creates a Jira remediation ticket and notifies the security champions in Microsoft Teams.
  tags:
  - security
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: code-security
    port: 8080
    tools:
    - name: handle-code-scanning-alert
      description: Given a code scanning alert, create a remediation ticket and notify security champions.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository name.
      - name: rule_id
        in: body
        type: string
        description: Code scanning rule ID.
      - name: file_path
        in: body
        type: string
        description: Affected file path.
      - name: severity
        in: body
        type: string
        description: Finding severity.
      steps:
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Code Scan: {{rule_id}} in {{repo}} ({{severity}})'
          description: 'File: {{file_path}} | Rule: {{rule_id}}'
      - name: notify-security
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_security_team_id
          channel_id: $secrets.teams_security_champions_channel_id
          text: 'Code Scanning Alert: {{rule_id}} in {{repo}} | {{severity}} | File: {{file_path}} | Jira: {{create-remediation.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → github-code-scanning-to-jira-remediation.yml

When Datadog APM detects a latency degradation after deployment, triggers a GitHub Actions rollback workflow and creates a Jira incident ticket.

naftiko: '0.5'
info:
  label: Datadog APM Degradation to Rollback
  description: When Datadog APM detects a latency degradation after deployment, triggers a GitHub Actions rollback workflow and creates a Jira incident ticket.
  tags:
  - observability
  - datadog
  - github
  - jira
capability:
  exposes:
  - type: mcp
    namespace: deployment-safety
    port: 8080
    tools:
    - name: handle-apm-degradation
      description: Given a degraded service and deployment SHA, trigger rollback and create incident ticket.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Degraded service name.
      - name: deployment_sha
        in: body
        type: string
        description: Git commit SHA of the problematic deployment.
      - name: latency_ms
        in: body
        type: number
        description: Current P99 latency in milliseconds.
      steps:
      - name: trigger-rollback
        type: call
        call: github.create-dispatch
        with:
          owner: dell-technologies
          repo: '{{service_name}}'
          event_type: rollback
          sha: '{{deployment_sha}}'
      - name: create-incident
        type: call
        call: jira.create-issue
        with:
          project_key: OPS
          issuetype: Bug
          summary: 'Latency degradation: {{service_name}} - {{latency_ms}}ms P99'
          description: Rollback triggered for SHA {{deployment_sha}}
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_ops_team_id
          channel_id: $secrets.teams_ops_channel_id
          text: 'Rollback triggered: {{service_name}} | SHA: {{deployment_sha}} | P99: {{latency_ms}}ms | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dispatches
      path: /repos/{{owner}}/{{repo}}/dispatches
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: create-dispatch
        method: POST
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → datadog-apm-degradation-to-rollback.yml

When Okta detects suspicious login activity, creates a ServiceNow security incident and alerts the SOC team via PagerDuty and Microsoft Teams.

naftiko: '0.5'
info:
  label: Okta Suspicious Activity to SOC Alert
  description: When Okta detects suspicious login activity, creates a ServiceNow security incident and alerts the SOC team via PagerDuty and Microsoft Teams.
  tags:
  - security
  - okta
  - servicenow
  - pagerduty
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: handle-suspicious-login
      description: Given an Okta user and suspicious event details, create a security incident and alert SOC.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: Email of the user with suspicious activity.
      - name: event_type
        in: body
        type: string
        description: Type of suspicious event.
      - name: ip_address
        in: body
        type: string
        description: Source IP address.
      steps:
      - name: create-sec-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: 'Suspicious Okta activity: {{user_email}} - {{event_type}} from {{ip_address}}'
      - name: page-soc
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pagerduty_soc_service_id
          title: 'Okta Alert: {{event_type}} - {{user_email}}'
      - name: notify-soc
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_security_team_id
          channel_id: $secrets.teams_soc_channel_id
          text: 'Okta Alert: {{user_email}} | {{event_type}} | IP: {{ip_address}} | SNOW: {{create-sec-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: 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 → okta-suspicious-activity-to-soc-alert.yml

Enriches a Salesforce lead with LinkedIn profile data to provide the sales team with current title, company, and role context before prospect outreach.

naftiko: '0.5'
info:
  label: LinkedIn Sales Intelligence Enrichment
  description: Enriches a Salesforce lead with LinkedIn profile data to provide the sales team with current title, company, and role context before prospect outreach.
  tags:
  - sales
  - crm
  - salesforce
  - linkedin
  - enrichment
capability:
  exposes:
  - type: mcp
    namespace: sales-intelligence
    port: 8080
    tools:
    - name: enrich-lead-from-linkedin
      description: Given a Salesforce lead ID and LinkedIn member URN, retrieve LinkedIn profile data and update the Salesforce lead record with current title, company, and industry for pre-call research.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Salesforce lead ID to enrich.
      - name: linkedin_member_urn
        in: body
        type: string
        description: LinkedIn member URN for the prospect.
      steps:
      - name: get-linkedin-profile
        type: call
        call: linkedin.get-profile
        with:
          member_urn: '{{linkedin_member_urn}}'
      - name: update-lead
        type: call
        call: salesforce.update-lead
        with:
          lead_id: '{{lead_id}}'
          title: '{{get-linkedin-profile.headline}}'
          linkedin_url: https://www.linkedin.com/in/{{get-linkedin-profile.vanityName}}
          industry: '{{get-linkedin-profile.industry}}'
  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://dell.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 → linkedin-sales-intelligence-enrichment.yml

When GitHub Actions test suite fails, creates a Jira bug with test logs and alerts the QA channel in Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Actions Test Failure to Teams Alert
  description: When GitHub Actions test suite fails, creates a Jira bug with test logs and alerts the QA channel in Microsoft Teams.
  tags:
  - devops
  - github
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: testing
    port: 8080
    tools:
    - name: handle-test-failure
      description: Given a failed test run, create a Jira bug and notify QA team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repository name.
      - name: workflow_name
        in: body
        type: string
        description: GitHub Actions workflow name.
      - name: failure_summary
        in: body
        type: string
        description: Test failure summary.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: QA
          issuetype: Bug
          summary: 'Test Failure: {{workflow_name}} in {{repo}}'
          description: '{{failure_summary}}'
      - name: notify-qa
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_dev_team_id
          channel_id: $secrets.teams_qa_channel_id
          text: 'Test Failure: {{workflow_name}} in {{repo}} | Jira: {{create-bug.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → github-actions-test-failure-to-teams-alert.yml

Enriches a company record with firmographic data from ZoomInfo by domain name.

naftiko: '0.5'
info:
  label: ZoomInfo Company Enrichment Lookup
  description: Enriches a company record with firmographic data from ZoomInfo by domain name.
  tags:
  - sales
  - zoominfo
  - data-enrichment
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: enrich-company-by-domain
      description: Given a company website domain, return the ZoomInfo company profile with revenue and employee count.
      inputParameters:
      - name: domain
        in: body
        type: string
        description: Company website domain (e.g. acme.com).
      call: zoominfo.enrich-company
      with:
        companyWebsite: '{{domain}}'
      outputParameters:
      - name: company_name
        type: string
        mapping: $.data[0].companyName
      - name: revenue
        type: string
        mapping: $.data[0].revenue
      - name: employee_count
        type: integer
        mapping: $.data[0].employeeCount
  consumes:
  - type: http
    namespace: zoominfo
    baseUri: https://api.zoominfo.com
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: company-enrich
      path: /enrich/company
      operations:
      - name: enrich-company
        method: POST
Open in Framework → View in Fleet → zoominfo-company-enrichment-lookup.yml

When a GitHub pull request is merged, transitions the linked Jira issue to Done and posts a release note to Confluence.

naftiko: '0.5'
info:
  label: GitHub PR Merge to Jira Transition
  description: When a GitHub pull request is merged, transitions the linked Jira issue to Done and posts a release note to Confluence.
  tags:
  - devops
  - github
  - jira
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: release-management
    port: 8080
    tools:
    - name: handle-pr-merge
      description: Given a merged PR number and linked Jira issue key, transition the issue and publish a release note.
      inputParameters:
      - name: pr_number
        in: body
        type: integer
        description: GitHub pull request number.
      - name: issue_key
        in: body
        type: string
        description: Linked Jira issue key.
      - name: repo
        in: body
        type: string
        description: Repository name.
      steps:
      - name: transition-jira
        type: call
        call: jira.transition-issue
        with:
          issue_id: '{{issue_key}}'
          transition: Done
      - name: create-release-note
        type: call
        call: confluence.create-page
        with:
          spaceKey: REL
          title: 'Release: {{issue_key}} - PR #{{pr_number}}'
          body: 'PR #{{pr_number}} merged in {{repo}}. Jira: {{issue_key}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_dev_team_id
          channel_id: $secrets.teams_releases_channel_id
          text: 'Merged PR #{{pr_number}} for {{issue_key}} in {{repo}} | Release note: {{create-release-note.id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: transition-issue
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://dell.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → github-pr-merge-to-jira-transition.yml

When Datadog triggers a critical alert, creates a ServiceNow P1 incident and pages the on-call engineer via PagerDuty.

naftiko: '0.5'
info:
  label: Datadog Alert to ServiceNow Incident
  description: When Datadog triggers a critical alert, creates a ServiceNow P1 incident and pages the on-call engineer via PagerDuty.
  tags:
  - observability
  - datadog
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: handle-critical-alert
      description: Given a Datadog alert ID and service name, create a ServiceNow incident and page on-call engineer.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Datadog alert ID.
      - name: service_name
        in: body
        type: string
        description: Affected service name.
      - name: alert_message
        in: body
        type: string
        description: Alert message text.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: infrastructure
          short_description: 'Datadog Alert: {{service_name}} - {{alert_message}}'
          urgency: '1'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pagerduty_infra_service_id
          title: 'Datadog Alert: {{service_name}}'
          body: 'Alert {{alert_id}}: {{alert_message}} | SNOW: {{create-incident.number}}'
      - name: annotate-dd
        type: call
        call: datadog.create-event
        with:
          title: Incident created for {{service_name}}
          text: 'SNOW: {{create-incident.number}} | PD: {{page-oncall.id}}'
          alert_type: info
  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://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → datadog-alert-to-servicenow-incident.yml

When a ServiceNow P1 incident is created, schedules a Microsoft Teams bridge call and pages the incident commander via PagerDuty.

naftiko: '0.5'
info:
  label: ServiceNow Major Incident Bridge Setup
  description: When a ServiceNow P1 incident is created, schedules a Microsoft Teams bridge call and pages the incident commander via PagerDuty.
  tags:
  - itsm
  - servicenow
  - microsoft-teams
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: major-incident
    port: 8080
    tools:
    - name: setup-major-incident-bridge
      description: Given a ServiceNow P1 incident number, set up a Teams bridge and page incident commander.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      - name: short_description
        in: body
        type: string
        description: Incident short description.
      - name: business_service
        in: body
        type: string
        description: Affected business service.
      steps:
      - name: page-ic
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pagerduty_ic_service_id
          title: 'Major Incident: {{incident_number}} - {{short_description}}'
      - name: create-bridge
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_incident_team_id
          channel_id: $secrets.teams_bridge_channel_id
          text: 'MAJOR INCIDENT BRIDGE: {{incident_number}} | {{short_description}} | Service: {{business_service}} | IC paged'
      - name: update-incident
        type: call
        call: servicenow.update-incident
        with:
          number: '{{incident_number}}'
          work_notes: 'Bridge created. IC paged via PagerDuty: {{page-ic.id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: update-incident
        method: PATCH
  - 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: 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 → servicenow-major-incident-bridge-setup.yml

Retrieves the current stage and amount of a HubSpot deal by deal ID.

naftiko: '0.5'
info:
  label: HubSpot Deal Stage Lookup
  description: Retrieves the current stage and amount of a HubSpot deal by deal ID.
  tags:
  - crm
  - hubspot
  - sales
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-deal-stage
      description: Given a HubSpot deal ID, return the deal name, stage, and amount.
      inputParameters:
      - name: deal_id
        in: body
        type: string
        description: HubSpot deal ID.
      call: hubspot.get-deal
      with:
        dealId: '{{deal_id}}'
      outputParameters:
      - name: deal_name
        type: string
        mapping: $.properties.dealname
      - name: stage
        type: string
        mapping: $.properties.dealstage
      - name: amount
        type: number
        mapping: $.properties.amount
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: deals
      path: /objects/deals/{{dealId}}
      inputParameters:
      - name: dealId
        in: path
      operations:
      - name: get-deal
        method: GET
Open in Framework → View in Fleet → hubspot-deal-stage-lookup.yml

When Azure Policy detects a non-compliant resource, creates a Jira remediation ticket and notifies the cloud governance team.

naftiko: '0.5'
info:
  label: Azure Resource Compliance to Jira Remediation
  description: When Azure Policy detects a non-compliant resource, creates a Jira remediation ticket and notifies the cloud governance team.
  tags:
  - compliance
  - azure
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: cloud-governance
    port: 8080
    tools:
    - name: handle-compliance-violation
      description: Given a non-compliant Azure resource, create a remediation ticket and notify governance.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Azure resource ID.
      - name: policy_name
        in: body
        type: string
        description: Azure Policy name.
      - name: compliance_state
        in: body
        type: string
        description: Compliance state.
      steps:
      - name: create-remediation
        type: call
        call: jira.create-issue
        with:
          project_key: CLOUD
          issuetype: Task
          summary: 'Compliance: {{policy_name}} violation on {{resource_id}}'
          description: 'State: {{compliance_state}}'
      - name: notify-governance
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_cloud_team_id
          channel_id: $secrets.teams_governance_channel_id
          text: 'Compliance Violation: {{policy_name}} | Resource: {{resource_id}} | Jira: {{create-remediation.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → azure-resource-compliance-to-jira-remediation.yml

Lists all channels in a Microsoft Teams team for routing notifications and messages.

naftiko: '0.5'
info:
  label: Microsoft Teams Channel List
  description: Lists all channels in a Microsoft Teams team for routing notifications and messages.
  tags:
  - collaboration
  - microsoft-teams
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: list-team-channels
      description: Given a Microsoft Teams team ID, return the list of channels with names and IDs.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Microsoft Teams team ID.
      call: msteams.list-channels
      with:
        teamId: '{{team_id}}'
      outputParameters:
      - name: channels
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channels
      path: /teams/{{teamId}}/channels
      inputParameters:
      - name: teamId
        in: path
      operations:
      - name: list-channels
        method: GET
Open in Framework → View in Fleet → microsoft-teams-channel-list.yml

Triggers a Snowflake stored procedure to refresh sales pipeline aggregates from Salesforce data and notifies the sales analytics team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Sales Pipeline Analytics Refresh
  description: Triggers a Snowflake stored procedure to refresh sales pipeline aggregates from Salesforce data and notifies the sales analytics team in Microsoft Teams.
  tags:
  - analytics
  - sales
  - snowflake
  - salesforce
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-analytics
    port: 8080
    tools:
    - name: refresh-pipeline-analytics
      description: Given a reporting period, execute the Snowflake sales pipeline refresh procedure and notify the sales analytics Microsoft Teams channel when complete.
      inputParameters:
      - name: period_start
        in: body
        type: string
        description: ISO 8601 start date for the reporting period.
      - name: period_end
        in: body
        type: string
        description: ISO 8601 end date for the reporting period.
      steps:
      - name: refresh-pipeline
        type: call
        call: snowflake.execute-query
        with:
          statement: CALL refresh_sales_pipeline_aggregates('{{period_start}}', '{{period_end}}')
      - name: notify-analytics-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_analytics_team_id
          channel_id: $secrets.teams_analytics_channel_id
          text: 'Sales pipeline analytics refreshed for {{period_start}} to {{period_end}}. Status: {{refresh-pipeline.status}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://dell.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: send-channel-message
        method: POST
Open in Framework → View in Fleet → snowflake-sales-pipeline-analytics-refresh.yml

Creates a ServiceNow change request for planned infrastructure changes, assigns it to the CAB, and posts a Microsoft Teams notification to the change advisory channel.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Workflow
  description: Creates a ServiceNow change request for planned infrastructure changes, assigns it to the CAB, and posts a Microsoft Teams notification to the change advisory channel.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: create-change-request
      description: Given a change description, risk level, and planned change window, create a ServiceNow change request for CAB review and notify the change advisory Microsoft Teams channel.
      inputParameters:
      - name: short_description
        in: body
        type: string
        description: Brief description of the planned change.
      - name: change_type
        in: body
        type: string
        description: 'Change type: standard, normal, or emergency.'
      - name: risk_level
        in: body
        type: string
        description: 'Risk assessment: low, medium, or high.'
      - name: planned_start
        in: body
        type: string
        description: Planned change start time in ISO 8601 format.
      - name: planned_end
        in: body
        type: string
        description: Planned change end time in ISO 8601 format.
      steps:
      - name: create-cr
        type: call
        call: servicenow.create-change-request
        with:
          type: '{{change_type}}'
          risk: '{{risk_level}}'
          short_description: '{{short_description}}'
          start_date: '{{planned_start}}'
          end_date: '{{planned_end}}'
      - name: notify-cab
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_cab_team_id
          channel_id: $secrets.teams_cab_channel_id
          text: 'Change request submitted: {{short_description}} | Risk: {{risk_level}} | Window: {{planned_start}} to {{planned_end}} | SNOW: {{create-cr.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.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
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-workflow.yml

Executes a count query against a Snowflake table and returns the current row count for data validation.

naftiko: '0.5'
info:
  label: Snowflake Table Row Count
  description: Executes a count query against a Snowflake table and returns the current row count for data validation.
  tags:
  - data
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: get-table-row-count
      description: Given a fully qualified Snowflake table name, return the total row count.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified Snowflake table name (e.g. PROD.SALES.ORDERS).
      call: snowflake.execute-query
      with:
        statement: SELECT COUNT(*) as row_count FROM {{table_name}}
      outputParameters:
      - name: row_count
        type: integer
        mapping: $.data[0][0]
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://dell.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-table-row-count.yml

Retrieves the priority and assignment group for a ServiceNow incident by number to support triage decisions.

naftiko: '0.5'
info:
  label: ServiceNow Incident Priority Lookup
  description: Retrieves the priority and assignment group for a ServiceNow incident by number to support triage decisions.
  tags:
  - itsm
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: itsm
    port: 8080
    tools:
    - name: get-incident-priority
      description: Given a ServiceNow incident number, return the priority, state, and assigned group.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number (e.g. INC0012345).
      call: servicenow.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: priority
        type: string
        mapping: $.result.priority.display_value
      - name: state
        type: string
        mapping: $.result.state.display_value
      - name: assignment_group
        type: string
        mapping: $.result.assignment_group.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.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: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-priority-lookup.yml

When a Workday leave request is approved, blocks the employee calendar in Microsoft 365 and notifies the manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Leave Request to Calendar Block
  description: When a Workday leave request is approved, blocks the employee calendar in Microsoft 365 and notifies the manager in Microsoft Teams.
  tags:
  - hr
  - workday
  - microsoft-teams
  - calendar
capability:
  exposes:
  - type: mcp
    namespace: leave-management
    port: 8080
    tools:
    - name: handle-leave-approval
      description: Given an approved leave request, block the employee calendar and notify manager.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: start_date
        in: body
        type: string
        description: Leave start date.
      - name: end_date
        in: body
        type: string
        description: Leave end date.
      - name: leave_type
        in: body
        type: string
        description: Type of leave.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: notify-manager
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_hr_team_id
          channel_id: $secrets.teams_hr_channel_id
          text: 'Leave approved: {{get-employee.full_name}} | {{leave_type}} | {{start_date}} to {{end_date}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://dell.workday.com/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: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-leave-request-to-calendar-block.yml

Retrieves the health status of a monitored host in Dynatrace by host ID.

naftiko: '0.5'
info:
  label: Dynatrace Host Health Lookup
  description: Retrieves the health status of a monitored host in Dynatrace by host ID.
  tags:
  - observability
  - dynatrace
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-host-health
      description: Given a Dynatrace host ID, return the host name, health state, and OS type.
      inputParameters:
      - name: host_id
        in: body
        type: string
        description: Dynatrace host entity ID.
      call: dynatrace.get-host
      with:
        entityId: '{{host_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.displayName
      - name: health_state
        type: string
        mapping: $.healthState
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://dell.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: entities
      path: /entities/{{entityId}}
      inputParameters:
      - name: entityId
        in: path
      operations:
      - name: get-host
        method: GET
Open in Framework → View in Fleet → dynatrace-host-health-lookup.yml

When Azure Defender raises a security alert, creates a ServiceNow security incident and notifies the SOC team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Security Alert to Incident Response
  description: When Azure Defender raises a security alert, creates a ServiceNow security incident and notifies the SOC team in Microsoft Teams.
  tags:
  - security
  - azure
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: security
    port: 8080
    tools:
    - name: handle-security-alert
      description: Given an Azure security alert ID and severity, create a ServiceNow security incident and notify SOC.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Azure Defender alert ID.
      - name: alert_name
        in: body
        type: string
        description: Security alert name.
      - name: severity
        in: body
        type: string
        description: Alert severity level.
      steps:
      - name: create-sec-incident
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: 'Azure Security: {{alert_name}}'
          urgency: '{{severity}}'
      - name: notify-soc
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_security_team_id
          channel_id: $secrets.teams_soc_channel_id
          text: 'Azure Security Alert: {{alert_name}} | Severity: {{severity}} | SNOW: {{create-sec-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → azure-security-alert-to-incident-response.yml

When a procurement requisition is submitted in SAP Ariba above the approval threshold, creates a ServiceNow approval task and notifies the procurement manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Procurement Requisition Approval
  description: When a procurement requisition is submitted in SAP Ariba above the approval threshold, creates a ServiceNow approval task and notifies the procurement manager in Microsoft Teams.
  tags:
  - procurement
  - sap-ariba
  - servicenow
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: initiate-requisition-approval
      description: Given a SAP Ariba requisition ID and total value, create a ServiceNow approval task and notify the procurement manager in Microsoft Teams to begin the approval workflow.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: SAP Ariba requisition ID requiring approval.
      - name: requisition_value_usd
        in: body
        type: number
        description: Total value of the procurement requisition in USD.
      - name: requester_name
        in: body
        type: string
        description: Name of the employee who submitted the requisition.
      - name: manager_upn
        in: body
        type: string
        description: UPN of the procurement manager who must approve.
      steps:
      - name: create-approval-task
        type: call
        call: servicenow.create-task
        with:
          category: procurement
          short_description: 'Approval required: SAP Ariba requisition {{requisition_id}} (${{requisition_value_usd}})'
          assigned_to: '{{manager_upn}}'
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{manager_upn}}'
          text: 'Procurement approval needed: Requisition {{requisition_id}} for ${{requisition_value_usd}} submitted by {{requester_name}} | SNOW task: {{create-approval-task.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.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: 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-procurement-requisition-approval.yml

Retrieves the current status of all critical infrastructure monitors from Datadog and returns a structured health summary for operations dashboards.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Health Summary
  description: Retrieves the current status of all critical infrastructure monitors from Datadog and returns a structured health summary for operations dashboards.
  tags:
  - observability
  - operations
  - datadog
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: infra-health
    port: 8080
    tools:
    - name: get-infrastructure-health
      description: Given a Datadog environment tag, retrieve all monitor statuses for the infrastructure services in that environment and return a structured health report. Use at the start of any incident investigation.
      inputParameters:
      - name: environment_tag
        in: body
        type: string
        description: Datadog environment tag to filter monitors (e.g. env:production).
      call: datadog.get-monitors
      with:
        monitor_tags: '{{environment_tag}}'
      outputParameters:
      - name: monitors
        type: array
        mapping: $.monitors
  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
      inputParameters:
      - name: monitor_tags
        in: query
      operations:
      - name: get-monitors
        method: GET
Open in Framework → View in Fleet → datadog-infrastructure-health-summary.yml

When a Salesforce opportunity reaches the Proposal stage, creates a corresponding SAP quotation and updates the Salesforce opportunity with the SAP quote number.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to SAP Quote Sync
  description: When a Salesforce opportunity reaches the Proposal stage, creates a corresponding SAP quotation and updates the Salesforce opportunity with the SAP quote number.
  tags:
  - sales
  - crm
  - salesforce
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: sales-erp
    port: 8080
    tools:
    - name: sync-opportunity-to-quote
      description: Given a Salesforce opportunity ID at Proposal stage, create a SAP sales quotation and write the SAP quote reference back to the Salesforce opportunity record.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID that has reached the Proposal stage.
      - name: customer_account_id
        in: body
        type: string
        description: SAP customer account number for the prospect.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-sap-quote
        type: call
        call: sap-sales.create-quotation
        with:
          customer_id: '{{customer_account_id}}'
          description: '{{get-opportunity.name}}'
          total_amount: '{{get-opportunity.amount}}'
          currency: USD
      - name: update-opportunity
        type: call
        call: salesforce-update.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          sap_quote_number: '{{create-sap-quote.quotation_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.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://dell-s4.sap.com/sap/opu/odata/sap/SD_SALES_QUOTATION_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: quotations
      path: /A_SalesQuotation
      operations:
      - name: create-quotation
        method: POST
  - type: http
    namespace: salesforce-update
    baseUri: https://dell.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-opportunity-to-sap-quote-sync.yml

Lists all resources within an Azure resource group for asset inventory and cost allocation purposes.

naftiko: '0.5'
info:
  label: Azure Resource Group Inventory
  description: Lists all resources within an Azure resource group for asset inventory and cost allocation purposes.
  tags:
  - cloud
  - azure
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: cloud
    port: 8080
    tools:
    - name: list-resource-group-resources
      description: Given an Azure subscription ID and resource group name, return the list of resources with their types and locations.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Azure resource group name.
      call: azure.list-resources
      with:
        subscriptionId: '{{subscription_id}}'
        resourceGroupName: '{{resource_group}}'
      outputParameters:
      - name: resources
        type: array
        mapping: $.value
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: resources
      path: /subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/resources
      inputParameters:
      - name: subscriptionId
        in: path
      - name: resourceGroupName
        in: path
      operations:
      - name: list-resources
        method: GET
Open in Framework → View in Fleet → azure-resource-group-inventory.yml

When SAP inventory falls below the reorder point, creates an SAP Ariba purchase requisition and notifies the procurement team in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Inventory Alert to Procurement Request
  description: When SAP inventory falls below the reorder point, creates an SAP Ariba purchase requisition and notifies the procurement team in Microsoft Teams.
  tags:
  - supply-chain
  - sap
  - sap-ariba
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: supply-chain
    port: 8080
    tools:
    - name: handle-reorder-alert
      description: Given a material number and current stock level, create a purchase requisition in Ariba.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number.
      - name: current_stock
        in: body
        type: number
        description: Current stock quantity.
      - name: reorder_quantity
        in: body
        type: number
        description: Recommended reorder quantity.
      steps:
      - name: create-pr
        type: call
        call: ariba.create-requisition
        with:
          material: '{{material_number}}'
          quantity: '{{reorder_quantity}}'
          description: 'Auto-reorder: stock at {{current_stock}}'
      - name: notify-procurement
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_procurement_team_id
          channel_id: $secrets.teams_procurement_channel_id
          text: 'Reorder triggered: {{material_number}} | Stock: {{current_stock}} | Order Qty: {{reorder_quantity}} | Ariba: {{create-pr.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
      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: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sap-inventory-alert-to-procurement-request.yml

Queries the current health status of a monitored service in Datadog by service name.

naftiko: '0.5'
info:
  label: Datadog Service Status Check
  description: Queries the current health status of a monitored service in Datadog by service name.
  tags:
  - observability
  - datadog
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-service-status
      description: Given a Datadog service name, return the current monitor status and last evaluation timestamp.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Name of the service to check in Datadog.
      call: datadog.search-monitors
      with:
        query: service:{{service_name}}
      outputParameters:
      - name: monitor_id
        type: integer
        mapping: $.monitors[0].id
      - name: status
        type: string
        mapping: $.monitors[0].overall_state
      - name: name
        type: string
        mapping: $.monitors[0].name
  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/search
      inputParameters:
      - name: query
        in: query
      operations:
      - name: search-monitors
        method: GET
Open in Framework → View in Fleet → datadog-service-status-check.yml

When a Power BI scheduled refresh fails, creates a Jira support ticket and posts the error details to the analytics Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Power BI Report Failure to Jira Ticket
  description: When a Power BI scheduled refresh fails, creates a Jira support ticket and posts the error details to the analytics Microsoft Teams channel.
  tags:
  - analytics
  - power-bi
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: handle-report-failure
      description: Given a Power BI dataset name and error details, create a Jira ticket and notify analytics team.
      inputParameters:
      - name: dataset_name
        in: body
        type: string
        description: Power BI dataset name.
      - name: workspace_name
        in: body
        type: string
        description: Power BI workspace name.
      - name: error_message
        in: body
        type: string
        description: Refresh error message.
      steps:
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: ANALYTICS
          issuetype: Bug
          summary: 'Power BI Refresh Failure: {{dataset_name}}'
          description: 'Workspace: {{workspace_name}} — Error: {{error_message}}'
      - name: notify-analytics
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_analytics_team_id
          channel_id: $secrets.teams_analytics_channel_id
          text: 'Power BI Refresh Failed: {{dataset_name}} in {{workspace_name}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → power-bi-report-failure-to-jira-ticket.yml

Retrieves an employee profile from Workday by employee ID including job title, department, and manager.

naftiko: '0.5'
info:
  label: Workday Employee Profile Lookup
  description: Retrieves an employee profile from Workday by employee ID including job title, department, and manager.
  tags:
  - hr
  - workday
  - employee-data
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-employee-profile
      description: Given a Workday employee ID, return the employee name, title, department, and manager.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday.get-worker
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.Worker.Personal.Name.Full
      - name: job_title
        type: string
        mapping: $.Worker.Position.Title
      - name: department
        type: string
        mapping: $.Worker.Position.Organization
      - name: manager
        type: string
        mapping: $.Worker.Position.Manager.Name
  consumes:
  - type: http
    namespace: workday
    baseUri: https://dell.workday.com/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-lookup.yml

Queries Jira for unresolved and unestimated backlog items across engineering projects and posts a weekly grooming digest to the engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Backlog Digest
  description: Queries Jira for unresolved and unestimated backlog items across engineering projects and posts a weekly grooming digest to the engineering Microsoft Teams channel.
  tags:
  - devops
  - engineering
  - jira
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: eng-reporting
    port: 8080
    tools:
    - name: digest-sprint-backlog
      description: Given a Jira project key, retrieve all unestimated and stale backlog items, then post a weekly digest to the engineering Microsoft Teams channel for grooming prioritisation.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key to analyse (e.g. ENG, PLAT).
      steps:
      - name: search-backlog
        type: call
        call: jira.search-issues
        with:
          jql: project = {{project_key}} AND status = Backlog AND (story_points is EMPTY OR updated <= -14d) ORDER BY created ASC
          maxResults: 50
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_engineering_team_id
          channel_id: $secrets.teams_engineering_channel_id
          text: 'Weekly backlog digest — {{project_key}}: {{search-backlog.total}} items need grooming (unestimated or stale >14d). Review in Jira.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /search
      inputParameters:
      - name: jql
        in: query
      - name: maxResults
        in: query
      operations:
      - name: search-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/{{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 → jira-sprint-backlog-digest.yml

When a Snowflake schema change is detected, creates a Jira data governance review ticket and notifies the data stewards in Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Schema Drift to Data Governance
  description: When a Snowflake schema change is detected, creates a Jira data governance review ticket and notifies the data stewards in Microsoft Teams.
  tags:
  - data-governance
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-governance
    port: 8080
    tools:
    - name: handle-schema-drift
      description: Given a Snowflake schema change, create a governance review ticket and notify stewards.
      inputParameters:
      - name: database
        in: body
        type: string
        description: Snowflake database name.
      - name: schema_name
        in: body
        type: string
        description: Schema name.
      - name: change_description
        in: body
        type: string
        description: Description of the schema change.
      steps:
      - name: create-review
        type: call
        call: jira.create-issue
        with:
          project_key: DG
          issuetype: Task
          summary: 'Schema Drift: {{database}}.{{schema_name}}'
          description: '{{change_description}}'
      - name: notify-stewards
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_data_team_id
          channel_id: $secrets.teams_governance_channel_id
          text: 'Schema Drift: {{database}}.{{schema_name}} | {{change_description}} | Jira: {{create-review.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → snowflake-schema-drift-to-data-governance.yml

When GitHub Dependabot raises a critical vulnerability, creates a ServiceNow security change request and notifies the AppSec team in Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Dependabot Alert to Security Review
  description: When GitHub Dependabot raises a critical vulnerability, creates a ServiceNow security change request and notifies the AppSec team in Microsoft Teams.
  tags:
  - security
  - github
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: appsec
    port: 8080
    tools:
    - name: handle-dependabot-alert
      description: Given a GitHub repository and vulnerability details, create a security change request and notify AppSec.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository name.
      - name: vulnerability
        in: body
        type: string
        description: Vulnerability CVE identifier.
      - name: severity
        in: body
        type: string
        description: Vulnerability severity.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          category: security
          short_description: 'Dependabot: {{vulnerability}} in {{repo}} ({{severity}})'
      - name: notify-appsec
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_security_team_id
          channel_id: $secrets.teams_appsec_channel_id
          text: 'Dependabot Alert: {{vulnerability}} in {{repo}} | Severity: {{severity}} | SNOW: {{create-change.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.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.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 → github-dependabot-alert-to-security-review.yml

When Workday headcount changes are approved, updates the Snowflake financial model and refreshes the Power BI headcount dashboard.

naftiko: '0.5'
info:
  label: Workday Headcount Change to Finance Forecast
  description: When Workday headcount changes are approved, updates the Snowflake financial model and refreshes the Power BI headcount dashboard.
  tags:
  - finance
  - workday
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: workforce-planning
    port: 8080
    tools:
    - name: sync-headcount-to-forecast
      description: Given a headcount change, update financial model and refresh dashboard.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name.
      - name: headcount_delta
        in: body
        type: integer
        description: Change in headcount.
      - name: effective_date
        in: body
        type: string
        description: Change effective date.
      steps:
      - name: update-model
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO FINANCE.HEADCOUNT_CHANGES VALUES ('{{department}}', {{headcount_delta}}, '{{effective_date}}')
      - name: refresh-dashboard
        type: call
        call: powerbi.trigger-refresh
        with:
          groupId: $secrets.powerbi_finance_workspace_id
          datasetId: $secrets.powerbi_headcount_dataset_id
      - name: notify-finance
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_finance_team_id
          channel_id: $secrets.teams_fp_and_a_channel_id
          text: 'Headcount change: {{department}} | Delta: {{headcount_delta}} | Effective: {{effective_date}} | Dashboard refreshing'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://dell.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: /groups/{{groupId}}/datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: groupId
        in: path
      - name: datasetId
        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: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-headcount-change-to-finance-forecast.yml

When a Datadog monitor detects a P1 infrastructure alert, creates a ServiceNow critical incident, pages the SRE team via PagerDuty, and posts to the IT operations Microsoft Teams channel.

naftiko: '0.5'
info:
  label: ServiceNow IT Incident Response
  description: When a Datadog monitor detects a P1 infrastructure alert, creates a ServiceNow critical incident, pages the SRE team via PagerDuty, and posts to the IT operations Microsoft Teams channel.
  tags:
  - itsm
  - incident-response
  - datadog
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: it-ops
    port: 8080
    tools:
    - name: handle-p1-infrastructure-incident
      description: Given a Datadog P1 alert, create a ServiceNow critical incident, page the on-call SRE team via PagerDuty, and post to the IT operations Teams channel.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID that triggered the P1 alert.
      - name: service_affected
        in: body
        type: string
        description: Name of the infrastructure service affected.
      - name: alert_message
        in: body
        type: string
        description: Full alert message from Datadog.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: infrastructure
          impact: 1
          urgency: 1
          short_description: 'P1: {{service_affected}} — {{alert_message}}'
          assigned_group: SRE_ONCALL
      - name: page-sre
        type: call
        call: pagerduty.create-incident
        with:
          title: 'P1 Infrastructure: {{service_affected}}'
          urgency: high
          service_id: $secrets.pagerduty_infra_service_id
      - name: notify-teams
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_it_ops_team_id
          channel_id: $secrets.teams_it_ops_channel_id
          text: 'P1 INCIDENT: {{service_affected}} | SNOW: {{create-incident.number}} | PD: {{page-sre.html_url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.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_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/{{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 → servicenow-it-incident-response.yml

Syncs an updated Confluence runbook page to a ServiceNow knowledge base article and notifies the operations team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Confluence Runbook to ServiceNow KB Sync
  description: Syncs an updated Confluence runbook page to a ServiceNow knowledge base article and notifies the operations team in Microsoft Teams.
  tags:
  - knowledge-management
  - confluence
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: knowledge-management
    port: 8080
    tools:
    - name: sync-runbook-to-kb
      description: Given a Confluence page ID, sync content to ServiceNow KB and notify operations.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: Confluence page ID.
      - name: kb_category
        in: body
        type: string
        description: ServiceNow KB category.
      steps:
      - name: get-page
        type: call
        call: confluence.get-page
        with:
          id: '{{page_id}}'
      - name: create-kb-article
        type: call
        call: servicenow.create-kb-article
        with:
          title: '{{get-page.title}}'
          category: '{{kb_category}}'
          body: '{{get-page.body}}'
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_ops_team_id
          channel_id: $secrets.teams_ops_channel_id
          text: 'Runbook synced to SNOW KB: {{get-page.title}} | Category: {{kb_category}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://dell.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: kb-articles
      path: /table/kb_knowledge
      operations:
      - name: create-kb-article
        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-channel-message
        method: POST
Open in Framework → View in Fleet → confluence-runbook-to-servicenow-kb-sync.yml

Retrieves repository metadata from GitHub including language, default branch, and open issue count.

naftiko: '0.5'
info:
  label: GitHub Repository Details Lookup
  description: Retrieves repository metadata from GitHub including language, default branch, and open issue count.
  tags:
  - devops
  - github
  - repositories
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: get-repository-details
      description: Given an organization and repository name, return the primary language, default branch, and open issues count.
      inputParameters:
      - name: org
        in: body
        type: string
        description: GitHub organization name.
      - name: repo
        in: body
        type: string
        description: GitHub repository name.
      call: github.get-repo
      with:
        owner: '{{org}}'
        repo: '{{repo}}'
      outputParameters:
      - name: language
        type: string
        mapping: $.language
      - name: default_branch
        type: string
        mapping: $.default_branch
      - name: open_issues
        type: integer
        mapping: $.open_issues_count
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{owner}}/{{repo}}
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-details-lookup.yml

When a LinkedIn campaign generates new leads, imports them into Salesforce and sends a lead notification to the sales team in Microsoft Teams.

naftiko: '0.5'
info:
  label: LinkedIn Campaign to Salesforce Lead Import
  description: When a LinkedIn campaign generates new leads, imports them into Salesforce and sends a lead notification to the sales team in Microsoft Teams.
  tags:
  - marketing
  - linkedin
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lead-generation
    port: 8080
    tools:
    - name: import-linkedin-leads
      description: Given a LinkedIn campaign ID, import generated leads to Salesforce and notify sales.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: LinkedIn campaign ID.
      - name: lead_name
        in: body
        type: string
        description: Lead full name.
      - name: lead_email
        in: body
        type: string
        description: Lead email address.
      - name: company
        in: body
        type: string
        description: Lead company name.
      steps:
      - name: create-sf-lead
        type: call
        call: salesforce.create-lead
        with:
          LastName: '{{lead_name}}'
          Email: '{{lead_email}}'
          Company: '{{company}}'
          LeadSource: LinkedIn
      - name: notify-sales
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_sales_team_id
          channel_id: $secrets.teams_leads_channel_id
          text: 'New LinkedIn lead: {{lead_name}} at {{company}} | Campaign: {{campaign_id}} | SF: {{create-sf-lead.id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.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: 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 → linkedin-campaign-to-salesforce-lead-import.yml

When an Azure budget threshold is breached, creates a ServiceNow cost investigation ticket and alerts the FinOps team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure Cost Budget Breach Notification
  description: When an Azure budget threshold is breached, creates a ServiceNow cost investigation ticket and alerts the FinOps team in Microsoft Teams.
  tags:
  - finops
  - azure
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: handle-budget-breach
      description: Given an Azure subscription and budget breach details, create investigation ticket and notify.
      inputParameters:
      - name: subscription_name
        in: body
        type: string
        description: Azure subscription name.
      - name: budget_name
        in: body
        type: string
        description: Budget name.
      - name: current_spend
        in: body
        type: number
        description: Current spend amount.
      - name: budget_limit
        in: body
        type: number
        description: Budget limit amount.
      steps:
      - name: create-investigation
        type: call
        call: servicenow.create-incident
        with:
          category: cloud_cost
          short_description: 'Azure budget breach: {{budget_name}} on {{subscription_name}} - ${{current_spend}}/${{budget_limit}}'
      - name: notify-finops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_finops_team_id
          channel_id: $secrets.teams_finops_channel_id
          text: 'Budget Breach: {{subscription_name}} | {{budget_name}} | Spend: ${{current_spend}} / Limit: ${{budget_limit}} | SNOW: {{create-investigation.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cost-budget-breach-notification.yml

When a HubSpot marketing form is submitted, creates or updates a Salesforce lead and notifies the SDR team in Microsoft Teams.

naftiko: '0.5'
info:
  label: HubSpot Form Submission to Salesforce Lead
  description: When a HubSpot marketing form is submitted, creates or updates a Salesforce lead and notifies the SDR team in Microsoft Teams.
  tags:
  - marketing
  - hubspot
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: lead-management
    port: 8080
    tools:
    - name: import-hubspot-lead
      description: Given a HubSpot form submission, create a Salesforce lead and notify SDRs.
      inputParameters:
      - name: form_name
        in: body
        type: string
        description: HubSpot form name.
      - name: lead_email
        in: body
        type: string
        description: Submitted email address.
      - name: lead_name
        in: body
        type: string
        description: Submitted name.
      - name: company
        in: body
        type: string
        description: Company name.
      steps:
      - name: create-sf-lead
        type: call
        call: salesforce.create-lead
        with:
          Email: '{{lead_email}}'
          LastName: '{{lead_name}}'
          Company: '{{company}}'
          LeadSource: HubSpot - {{form_name}}
      - name: notify-sdrs
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_sales_team_id
          channel_id: $secrets.teams_sdr_channel_id
          text: 'New lead from HubSpot: {{lead_name}} at {{company}} | Form: {{form_name}} | SF: {{create-sf-lead.id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.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: 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 → hubspot-form-submission-to-salesforce-lead.yml

Escalates a high-severity Salesforce support case by creating a GitHub issue and notifying the engineering on-call via PagerDuty.

naftiko: '0.5'
info:
  label: Salesforce Case Escalation to Engineering
  description: Escalates a high-severity Salesforce support case by creating a GitHub issue and notifying the engineering on-call via PagerDuty.
  tags:
  - support
  - salesforce
  - github
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: support-escalation
    port: 8080
    tools:
    - name: escalate-case-to-engineering
      description: Given a Salesforce case number, escalate to engineering by creating a GitHub issue and paging on-call.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce case ID.
      - name: case_subject
        in: body
        type: string
        description: Case subject line.
      - name: case_description
        in: body
        type: string
        description: Case description.
      steps:
      - name: create-gh-issue
        type: call
        call: github.create-issue
        with:
          owner: dell-technologies
          repo: product-issues
          title: 'Escalation: {{case_subject}}'
          body: 'Salesforce Case: {{case_id}} — {{case_description}}'
      - name: page-engineering
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pagerduty_eng_service_id
          title: 'Case Escalation: {{case_subject}}'
          body: 'SF Case: {{case_id}} | GH: {{create-gh-issue.html_url}}'
      - name: update-case
        type: call
        call: salesforce.update-case
        with:
          id: '{{case_id}}'
          Status: Escalated
          Engineering_Ref__c: '{{create-gh-issue.html_url}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-case
        method: PATCH
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/{{owner}}/{{repo}}/issues
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: create-issue
        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
Open in Framework → View in Fleet → salesforce-case-escalation-to-engineering.yml

Retrieves p95 and p99 latency metrics for a specified service from Datadog APM and returns a structured latency summary for operations review.

naftiko: '0.5'
info:
  label: Datadog APM Service Latency Monitor
  description: Retrieves p95 and p99 latency metrics for a specified service from Datadog APM and returns a structured latency summary for operations review.
  tags:
  - observability
  - monitoring
  - datadog
  - operations
capability:
  exposes:
  - type: mcp
    namespace: apm-monitoring
    port: 8080
    tools:
    - name: get-service-latency
      description: Given a service name and time window, retrieve p95 and p99 latency metrics from Datadog APM. Use to assess service performance before and after deployments.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Name of the service to query (e.g. order-api, auth-service).
      - name: from_timestamp
        in: body
        type: integer
        description: Start of the query window as a Unix epoch timestamp.
      - name: to_timestamp
        in: body
        type: integer
        description: End of the query window as a Unix epoch timestamp.
      call: datadog.query-metrics
      with:
        query: avg:trace.web.request.duration.by_service{service:{{service_name}}} by {service}
        from: '{{from_timestamp}}'
        to: '{{to_timestamp}}'
      outputParameters:
      - name: series
        type: array
        mapping: $.series
  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: metrics-query
      path: /query
      inputParameters:
      - name: query
        in: query
      - name: from
        in: query
      - name: to
        in: query
      operations:
      - name: query-metrics
        method: GET
Open in Framework → View in Fleet → datadog-apm-service-latency-monitor.yml

When a Jira release is published, generates a changelog in Confluence and posts a summary to the product Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Release to Confluence Changelog
  description: When a Jira release is published, generates a changelog in Confluence and posts a summary to the product Microsoft Teams channel.
  tags:
  - release-management
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: release-management
    port: 8080
    tools:
    - name: publish-release-changelog
      description: Given a Jira project and version, generate a changelog in Confluence and notify.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: version_name
        in: body
        type: string
        description: Release version name.
      - name: release_date
        in: body
        type: string
        description: Release date.
      steps:
      - name: create-changelog
        type: call
        call: confluence.create-page
        with:
          spaceKey: REL
          title: Release {{version_name}} - {{release_date}}
          body: Changelog for {{project_key}} {{version_name}}
      - name: notify-product
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_product_team_id
          channel_id: $secrets.teams_releases_channel_id
          text: 'Release {{version_name}} published | Changelog: {{create-changelog.id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://dell.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → jira-release-to-confluence-changelog.yml

When a goods receipt is posted in SAP, matches it against pending invoices and notifies accounts payable in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Goods Receipt to Invoice Match
  description: When a goods receipt is posted in SAP, matches it against pending invoices and notifies accounts payable in Microsoft Teams.
  tags:
  - procurement
  - sap
  - microsoft-teams
  - accounts-payable
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: match-goods-receipt
      description: Given a SAP goods receipt number and PO number, match against pending invoices and notify AP.
      inputParameters:
      - name: gr_number
        in: body
        type: string
        description: SAP goods receipt document number.
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number.
      - name: amount
        in: body
        type: number
        description: Goods receipt amount.
      steps:
      - name: lookup-invoice
        type: call
        call: sap.lookup-invoice
        with:
          po_number: '{{po_number}}'
          doc_type: invoice
      - name: post-match
        type: call
        call: sap.post-three-way-match
        with:
          gr_number: '{{gr_number}}'
          invoice_ref: '{{lookup-invoice.invoice_number}}'
          match_type: three_way
      - name: notify-ap
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_finance_team_id
          channel_id: $secrets.teams_ap_channel_id
          text: 'Three-way match: GR {{gr_number}} | PO {{po_number}} | Invoice {{lookup-invoice.invoice_number}} | ${{amount}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://dell-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
      operations:
      - name: lookup-invoice
        method: GET
      - name: post-three-way-match
        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-channel-message
        method: POST
Open in Framework → View in Fleet → sap-goods-receipt-to-invoice-match.yml

When a new hire is created in Workday, provisions Active Directory access via Microsoft Graph, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message.

naftiko: '0.5'
info:
  label: Employee Onboarding Orchestration
  description: When a new hire is created in Workday, provisions Active Directory access via Microsoft Graph, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams welcome message.
  tags:
  - hr
  - onboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-onboarding
    port: 8080
    tools:
    - name: trigger-employee-onboarding
      description: Given a Workday employee ID and start date, provision Microsoft 365 access, create a ServiceNow onboarding ticket, and send a Teams welcome message.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the new hire.
      - name: start_date
        in: body
        type: string
        description: Employee start date in ISO 8601 format.
      - name: manager_email
        in: body
        type: string
        description: Email address of the hiring manager.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: provision-user
        type: call
        call: msgraph.create-user
        with:
          displayName: '{{get-employee.full_name}}'
          userPrincipalName: '{{get-employee.work_email}}'
          department: '{{get-employee.department}}'
      - name: open-snow-ticket
        type: call
        call: servicenow.create-incident
        with:
          category: hr_onboarding
          short_description: 'New hire onboarding: {{get-employee.full_name}}'
          assigned_group: IT_Onboarding
      - name: send-welcome
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.work_email}}'
          text: 'Welcome to Dell Technologies, {{get-employee.first_name}}! Your IT 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: /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
  - type: http
    namespace: servicenow
    baseUri: https://dell.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 → employee-onboarding-orchestration.yml

Books a Microsoft Teams meeting room via Microsoft Graph Calendar API for a given organizer, time slot, and attendee list, confirming the booking in the Teams channel.

naftiko: '0.5'
info:
  label: Microsoft Teams Meeting Room Booking
  description: Books a Microsoft Teams meeting room via Microsoft Graph Calendar API for a given organizer, time slot, and attendee list, confirming the booking in the Teams channel.
  tags:
  - communication
  - microsoft-teams
  - microsoft-365
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: meeting-management
    port: 8080
    tools:
    - name: book-meeting-room
      description: Given an organizer UPN, meeting subject, start and end time, and list of attendees, create a Microsoft Teams meeting event via Graph API and send the invite to all attendees.
      inputParameters:
      - name: organizer_upn
        in: body
        type: string
        description: Microsoft 365 UPN of the meeting organizer.
      - name: subject
        in: body
        type: string
        description: Meeting subject or agenda title.
      - name: start_time
        in: body
        type: string
        description: Meeting start time in ISO 8601 format.
      - name: end_time
        in: body
        type: string
        description: Meeting end time in ISO 8601 format.
      - name: attendee_upns
        in: body
        type: string
        description: Comma-separated list of attendee UPNs.
      call: msgraph.create-event
      with:
        organizer: '{{organizer_upn}}'
        subject: '{{subject}}'
        start: '{{start_time}}'
        end: '{{end_time}}'
        attendees: '{{attendee_upns}}'
      outputParameters:
      - name: event_id
        type: string
        mapping: $.id
      - name: join_url
        type: string
        mapping: $.onlineMeeting.joinUrl
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: events
      path: /users/{{organizer_upn}}/events
      inputParameters:
      - name: organizer_upn
        in: path
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → microsoft-teams-meeting-room-booking.yml

When a compensation change is finalized in Workday, syncs the update to the payroll system and sends confirmation to the HR business partner.

naftiko: '0.5'
info:
  label: Workday Compensation Change to Payroll Sync
  description: When a compensation change is finalized in Workday, syncs the update to the payroll system and sends confirmation to the HR business partner.
  tags:
  - hr
  - workday
  - microsoft-teams
  - payroll
capability:
  exposes:
  - type: mcp
    namespace: compensation
    port: 8080
    tools:
    - name: sync-compensation-change
      description: Given a Workday compensation change, sync to payroll and notify HRBP.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: new_salary
        in: body
        type: number
        description: New annual salary amount.
      - name: effective_date
        in: body
        type: string
        description: Change effective date.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: notify-hrbp
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_hr_team_id
          channel_id: $secrets.teams_payroll_channel_id
          text: 'Compensation change synced: {{get-employee.full_name}} | Effective: {{effective_date}} | Payroll updated'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://dell.workday.com/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: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-compensation-change-to-payroll-sync.yml

When a ServiceNow asset reaches end-of-life, creates an SAP Ariba purchase requisition for replacement and notifies IT asset management.

naftiko: '0.5'
info:
  label: ServiceNow Asset Refresh to Procurement
  description: When a ServiceNow asset reaches end-of-life, creates an SAP Ariba purchase requisition for replacement and notifies IT asset management.
  tags:
  - asset-management
  - servicenow
  - sap-ariba
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: asset-lifecycle
    port: 8080
    tools:
    - name: handle-asset-eol
      description: Given a ServiceNow asset at end-of-life, create a replacement requisition and notify.
      inputParameters:
      - name: asset_tag
        in: body
        type: string
        description: ServiceNow asset tag.
      - name: asset_type
        in: body
        type: string
        description: Type of asset.
      - name: assigned_to
        in: body
        type: string
        description: Current asset assignee.
      steps:
      - name: create-requisition
        type: call
        call: ariba.create-requisition
        with:
          description: Replacement for {{asset_type}} ({{asset_tag}})
          assigned_to: '{{assigned_to}}'
      - name: notify-itam
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_it_team_id
          channel_id: $secrets.teams_itam_channel_id
          text: 'Asset EOL: {{asset_tag}} ({{asset_type}}) | Assignee: {{assigned_to}} | Ariba PR: {{create-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
      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: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-asset-refresh-to-procurement.yml

When a purchase order is approved in SAP, syncs the PO to SAP Ariba for supplier collaboration and posts confirmation to the procurement Teams channel.

naftiko: '0.5'
info:
  label: SAP Purchase Order Approval to Ariba Sync
  description: When a purchase order is approved in SAP, syncs the PO to SAP Ariba for supplier collaboration and posts confirmation to the procurement Teams channel.
  tags:
  - procurement
  - sap
  - sap-ariba
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: sync-po-to-ariba
      description: Given an approved SAP PO number, sync to Ariba and notify procurement.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number.
      - name: vendor_id
        in: body
        type: string
        description: Vendor ID.
      - name: total_amount
        in: body
        type: number
        description: PO total amount.
      steps:
      - name: sync-to-ariba
        type: call
        call: ariba.create-order
        with:
          po_reference: '{{po_number}}'
          vendor: '{{vendor_id}}'
          amount: '{{total_amount}}'
      - name: notify-procurement
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_procurement_team_id
          channel_id: $secrets.teams_procurement_channel_id
          text: 'PO {{po_number}} synced to Ariba | Vendor: {{vendor_id}} | Amount: ${{total_amount}}'
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/procurement/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: orders
      path: /orders
      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: 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 → sap-purchase-order-approval-to-ariba-sync.yml

Processes a vendor invoice in SAP S/4HANA by creating an invoice document, matching it to the purchase order, and notifying the accounts payable team in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP S/4HANA Invoice Processing
  description: Processes a vendor invoice in SAP S/4HANA by creating an invoice document, matching it to the purchase order, and notifying the accounts payable team in Microsoft Teams.
  tags:
  - finance
  - accounts-payable
  - sap
  - erp
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: accounts-payable
    port: 8080
    tools:
    - name: process-vendor-invoice
      description: Given a vendor invoice number, amount, and related PO number, post the invoice in SAP S/4HANA and notify the accounts payable Microsoft Teams channel for payment scheduling.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: Vendor invoice reference number.
      - name: po_number
        in: body
        type: string
        description: SAP purchase order number the invoice is matched to.
      - name: invoice_amount_usd
        in: body
        type: number
        description: Invoice total amount in USD.
      - name: vendor_id
        in: body
        type: string
        description: SAP vendor master ID.
      steps:
      - name: post-invoice
        type: call
        call: sap.create-invoice
        with:
          vendor_id: '{{vendor_id}}'
          invoice_number: '{{invoice_number}}'
          po_number: '{{po_number}}'
          amount: '{{invoice_amount_usd}}'
          currency: USD
      - name: notify-ap-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_finance_team_id
          channel_id: $secrets.teams_ap_channel_id
          text: 'Invoice posted: {{invoice_number}} for ${{invoice_amount_usd}} from vendor {{vendor_id}} matched to PO {{po_number}} | SAP doc: {{post-invoice.document_number}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://dell-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-invoice
        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-channel-message
        method: POST
Open in Framework → View in Fleet → sap-s-4hana-invoice-processing.yml

Retrieves the lifecycle state of an Oracle Cloud Infrastructure compute instance.

naftiko: '0.5'
info:
  label: Oracle Cloud Instance Status
  description: Retrieves the lifecycle state of an Oracle Cloud Infrastructure compute instance.
  tags:
  - cloud
  - oracle-cloud
  - compute
capability:
  exposes:
  - type: mcp
    namespace: cloud
    port: 8080
    tools:
    - name: get-instance-status
      description: Given an OCI instance OCID, return the lifecycle state, shape, and availability domain.
      inputParameters:
      - name: instance_id
        in: body
        type: string
        description: OCI compute instance OCID.
      call: oci.get-instance
      with:
        instanceId: '{{instance_id}}'
      outputParameters:
      - name: lifecycle_state
        type: string
        mapping: $.lifecycleState
      - name: shape
        type: string
        mapping: $.shape
  consumes:
  - type: http
    namespace: oci
    baseUri: https://iaas.us-ashburn-1.oraclecloud.com/20160918
    authentication:
      type: bearer
      token: $secrets.oci_token
    resources:
    - name: instances
      path: /instances/{{instanceId}}
      inputParameters:
      - name: instanceId
        in: path
      operations:
      - name: get-instance
        method: GET
Open in Framework → View in Fleet → oracle-cloud-instance-status.yml

When a Snowflake ETL pipeline fails, creates a Jira bug ticket and triggers a PagerDuty incident for the data engineering team.

naftiko: '0.5'
info:
  label: Snowflake ETL Failure to PagerDuty Escalation
  description: When a Snowflake ETL pipeline fails, creates a Jira bug ticket and triggers a PagerDuty incident for the data engineering team.
  tags:
  - data-engineering
  - snowflake
  - jira
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: data-engineering
    port: 8080
    tools:
    - name: handle-etl-failure
      description: Given a failed Snowflake task name and error message, create a Jira bug and trigger PagerDuty.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: Snowflake task name that failed.
      - name: error_message
        in: body
        type: string
        description: Error message from the failed task.
      - name: database
        in: body
        type: string
        description: Snowflake database name.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'ETL Failure: {{task_name}} in {{database}}'
          description: '{{error_message}}'
      - name: page-data-eng
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pagerduty_data_service_id
          title: 'ETL Failure: {{task_name}}'
          body: 'Database: {{database}} | Error: {{error_message}} | Jira: {{create-bug.key}}'
      - name: notify-channel
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_data_team_id
          channel_id: $secrets.teams_data_alerts_channel_id
          text: 'ETL Failure: {{task_name}} | {{error_message}} | Jira: {{create-bug.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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: 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: 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 → snowflake-etl-failure-to-pagerduty-escalation.yml

When PagerDuty creates a major incident, posts a status update to Confluence and creates an incident timeline page.

naftiko: '0.5'
info:
  label: PagerDuty Incident to Statuspage Update
  description: When PagerDuty creates a major incident, posts a status update to Confluence and creates an incident timeline page.
  tags:
  - incident-management
  - pagerduty
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: incident-communications
    port: 8080
    tools:
    - name: publish-incident-status
      description: Given a PagerDuty incident, create a status update and incident timeline page.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: PagerDuty incident ID.
      - name: incident_title
        in: body
        type: string
        description: Incident title.
      - name: service_name
        in: body
        type: string
        description: Affected service name.
      steps:
      - name: create-timeline
        type: call
        call: confluence.create-page
        with:
          spaceKey: INC
          title: 'Incident: {{incident_title}} - {{incident_id}}'
          body: 'Service: {{service_name}} | PagerDuty: {{incident_id}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_incident_team_id
          channel_id: $secrets.teams_status_channel_id
          text: 'Major Incident: {{incident_title}} | Service: {{service_name}} | Timeline: {{create-timeline.id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://dell.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → pagerduty-incident-to-statuspage-update.yml

When a Salesforce territory assignment changes, updates lead routing rules and notifies affected reps in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Territory Change to Routing Update
  description: When a Salesforce territory assignment changes, updates lead routing rules and notifies affected reps in Microsoft Teams.
  tags:
  - crm
  - salesforce
  - microsoft-teams
  - sales-ops
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: handle-territory-change
      description: Given a territory reassignment, update routing rules and notify affected reps.
      inputParameters:
      - name: territory_name
        in: body
        type: string
        description: Territory name.
      - name: new_owner
        in: body
        type: string
        description: New territory owner.
      - name: previous_owner
        in: body
        type: string
        description: Previous territory owner.
      steps:
      - name: update-routing
        type: call
        call: salesforce.update-territory
        with:
          Name: '{{territory_name}}'
          OwnerId: '{{new_owner}}'
      - name: notify-sales-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_sales_team_id
          channel_id: $secrets.teams_sales_ops_channel_id
          text: 'Territory Change: {{territory_name}} | From: {{previous_owner}} -> To: {{new_owner}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: territories
      path: /sobjects/Territory2
      operations:
      - name: update-territory
        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-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-territory-change-to-routing-update.yml

When Azure Cost Management detects a spending anomaly, annotates Datadog, creates a ServiceNow cost-review incident, and posts to the FinOps Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly Response
  description: When Azure Cost Management detects a spending anomaly, annotates Datadog, creates a ServiceNow cost-review incident, and posts to the FinOps Microsoft Teams channel.
  tags:
  - finops
  - cloud
  - azure
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-azure-cost-anomaly
      description: Given an Azure cost anomaly alert with service and overage amount, annotate Datadog, open a ServiceNow cost-review incident, and notify the FinOps Microsoft Teams channel.
      inputParameters:
      - name: anomaly_id
        in: body
        type: string
        description: Azure cost anomaly ID from Cost Management.
      - name: azure_service
        in: body
        type: string
        description: Azure service name with the anomalous spend.
      - name: estimated_overage_usd
        in: body
        type: number
        description: Estimated spend anomaly in USD.
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID with the anomaly.
      steps:
      - name: annotate-dd
        type: call
        call: datadog.create-event
        with:
          title: 'Azure Cost Anomaly: {{azure_service}}'
          text: 'Anomaly {{anomaly_id}} on subscription {{subscription_id}} — overage: ${{estimated_overage_usd}}'
          alert_type: warning
      - name: open-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          category: cloud_cost
          short_description: 'Azure cost anomaly: {{azure_service}} — ${{estimated_overage_usd}}'
          assigned_group: FinOps_Team
      - name: notify-finops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_finops_team_id
          channel_id: $secrets.teams_finops_channel_id
          text: 'Azure Cost Anomaly: {{azure_service}} | ${{estimated_overage_usd}} overage | SNOW: {{open-snow-incident.number}} | Datadog: {{annotate-dd.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://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-response.yml

When a new hire is confirmed in Workday, creates a ServiceNow equipment request and assigns a laptop provisioning task.

naftiko: '0.5'
info:
  label: Workday New Hire to Equipment Request
  description: When a new hire is confirmed in Workday, creates a ServiceNow equipment request and assigns a laptop provisioning task.
  tags:
  - hr
  - workday
  - servicenow
  - asset-management
capability:
  exposes:
  - type: mcp
    namespace: onboarding
    port: 8080
    tools:
    - name: provision-new-hire-equipment
      description: Given a new hire employee ID and start date, create an equipment request in ServiceNow.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: start_date
        in: body
        type: string
        description: Employee start date.
      - name: department
        in: body
        type: string
        description: Department name.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-equip-request
        type: call
        call: servicenow.create-request
        with:
          category: hardware
          short_description: Equipment request for {{get-employee.full_name}} starting {{start_date}}
          assigned_group: IT_Asset_Management
      - name: notify-it
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_it_team_id
          channel_id: $secrets.teams_it_ops_channel_id
          text: 'New hire equipment: {{get-employee.full_name}} | Dept: {{department}} | Start: {{start_date}} | SNOW: {{create-equip-request.number}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://dell.workday.com/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://dell.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: 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 → workday-new-hire-to-equipment-request.yml

When a ServiceNow problem is resolved, creates a knowledge base article in Confluence and updates the ServiceNow known error database.

naftiko: '0.5'
info:
  label: ServiceNow Problem to Known Error KB
  description: When a ServiceNow problem is resolved, creates a knowledge base article in Confluence and updates the ServiceNow known error database.
  tags:
  - itsm
  - servicenow
  - confluence
  - knowledge-management
capability:
  exposes:
  - type: mcp
    namespace: problem-management
    port: 8080
    tools:
    - name: publish-known-error
      description: Given a resolved ServiceNow problem, create a KB article and update KEDB.
      inputParameters:
      - name: problem_number
        in: body
        type: string
        description: ServiceNow problem number.
      - name: root_cause
        in: body
        type: string
        description: Root cause analysis.
      - name: workaround
        in: body
        type: string
        description: Known workaround.
      steps:
      - name: create-kb-article
        type: call
        call: confluence.create-page
        with:
          spaceKey: KB
          title: 'Known Error: {{problem_number}}'
          body: 'Root Cause: {{root_cause}} — Workaround: {{workaround}}'
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_ops_team_id
          channel_id: $secrets.teams_ops_channel_id
          text: 'Known Error published: {{problem_number}} | KB: {{create-kb-article.id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://dell.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-problem-to-known-error-kb.yml

When an SAP Ariba contract approaches expiration, creates a Salesforce renewal opportunity and notifies the procurement manager.

naftiko: '0.5'
info:
  label: SAP Contract Expiry to Renewal Workflow
  description: When an SAP Ariba contract approaches expiration, creates a Salesforce renewal opportunity and notifies the procurement manager.
  tags:
  - procurement
  - sap-ariba
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: contract-management
    port: 8080
    tools:
    - name: handle-contract-expiry
      description: Given an expiring contract, create a renewal opportunity and notify procurement.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: Ariba contract ID.
      - name: contract_title
        in: body
        type: string
        description: Contract title.
      - name: expiry_date
        in: body
        type: string
        description: Contract expiration date.
      - name: vendor_name
        in: body
        type: string
        description: Vendor name.
      steps:
      - name: create-renewal
        type: call
        call: salesforce.create-opportunity
        with:
          Name: 'Renewal: {{contract_title}}'
          CloseDate: '{{expiry_date}}'
          StageName: Qualification
      - name: notify-procurement
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_procurement_team_id
          channel_id: $secrets.teams_contracts_channel_id
          text: 'Contract expiring: {{contract_title}} | Vendor: {{vendor_name}} | Expires: {{expiry_date}} | SF Opp: {{create-renewal.id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.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/{{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 → sap-contract-expiry-to-renewal-workflow.yml

When a Salesforce opportunity shows renewal risk, creates a Jira customer success task and sends an alert to the account team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Renewal Risk to Customer Success
  description: When a Salesforce opportunity shows renewal risk, creates a Jira customer success task and sends an alert to the account team in Microsoft Teams.
  tags:
  - crm
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: customer-success
    port: 8080
    tools:
    - name: handle-renewal-risk
      description: Given a Salesforce opportunity with renewal risk, create a CS task and notify the account team.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: account_name
        in: body
        type: string
        description: Account name.
      - name: risk_score
        in: body
        type: number
        description: Renewal risk score (0-100).
      steps:
      - name: create-cs-task
        type: call
        call: jira.create-issue
        with:
          project_key: CS
          issuetype: Task
          summary: 'Renewal Risk: {{account_name}} (Score: {{risk_score}})'
          description: Opportunity {{opportunity_id}} flagged for renewal risk.
      - name: notify-account-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_cs_team_id
          channel_id: $secrets.teams_cs_channel_id
          text: 'Renewal Risk Alert: {{account_name}} | Risk Score: {{risk_score}} | Jira: {{create-cs-task.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → salesforce-renewal-risk-to-customer-success.yml

When a Salesforce opportunity is marked Closed Won, creates a sales order in SAP S/4HANA and confirms the order in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Win to SAP Sales Order Creation
  description: When a Salesforce opportunity is marked Closed Won, creates a sales order in SAP S/4HANA and confirms the order in Microsoft Teams.
  tags:
  - order-management
  - salesforce
  - sap
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: order-management
    port: 8080
    tools:
    - name: create-sales-order-from-win
      description: Given a Salesforce opportunity ID, create a SAP sales order and confirm.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: account_name
        in: body
        type: string
        description: Customer account name.
      - name: deal_amount
        in: body
        type: number
        description: Deal amount in USD.
      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:
          order_type: OR
          customer: '{{account_name}}'
          amount: '{{deal_amount}}'
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_sales_team_id
          channel_id: $secrets.teams_orders_channel_id
          text: 'New sales order: {{account_name}} | ${{deal_amount}} | SAP: {{create-sap-order.order_number}} | SF: {{opportunity_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.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://dell-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
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-win-to-sap-sales-order-creation.yml

Retrieves an expense report summary from SAP Concur by report ID for audit and approval queries.

naftiko: '0.5'
info:
  label: SAP Concur Expense Report Lookup
  description: Retrieves an expense report summary from SAP Concur by report ID for audit and approval queries.
  tags:
  - finance
  - sap-concur
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: finance
    port: 8080
    tools:
    - name: get-expense-report
      description: Given a Concur expense report ID, return the report name, total amount, and approval status.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID.
      call: concur.get-report
      with:
        id: '{{report_id}}'
      outputParameters:
      - name: report_name
        type: string
        mapping: $.Name
      - name: total
        type: number
        mapping: $.Total
      - name: status
        type: string
        mapping: $.ApprovalStatusName
  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/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-report
        method: GET
Open in Framework → View in Fleet → sap-concur-expense-report-lookup.yml

When Datadog detects disk usage above 85 percent, creates a ServiceNow capacity planning request and notifies the infrastructure team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Datadog Disk Usage to Capacity Planning
  description: When Datadog detects disk usage above 85 percent, creates a ServiceNow capacity planning request and notifies the infrastructure team in Microsoft Teams.
  tags:
  - infrastructure
  - datadog
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: capacity-planning
    port: 8080
    tools:
    - name: handle-disk-usage-alert
      description: Given a host and disk usage percentage, create a capacity request and notify infra.
      inputParameters:
      - name: host_name
        in: body
        type: string
        description: Hostname with high disk usage.
      - name: disk_usage_pct
        in: body
        type: number
        description: Current disk usage percentage.
      - name: mount_point
        in: body
        type: string
        description: Filesystem mount point.
      steps:
      - name: create-request
        type: call
        call: servicenow.create-incident
        with:
          category: capacity
          short_description: 'Disk capacity: {{host_name}} at {{disk_usage_pct}}% on {{mount_point}}'
      - name: annotate-dd
        type: call
        call: datadog.create-event
        with:
          title: 'Capacity request: {{host_name}}'
          text: 'SNOW: {{create-request.number}}'
          alert_type: warning
      - name: notify-infra
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_infra_team_id
          channel_id: $secrets.teams_infra_channel_id
          text: 'Disk Alert: {{host_name}} at {{disk_usage_pct}}% on {{mount_point}} | SNOW: {{create-request.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://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-disk-usage-to-capacity-planning.yml

Monitors ServiceNow tickets for SLA breaches and escalates overdue tickets by updating priority, assigning to the next tier, and notifying the IT manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Ticket SLA Breach Escalation
  description: Monitors ServiceNow tickets for SLA breaches and escalates overdue tickets by updating priority, assigning to the next tier, and notifying the IT manager in Microsoft Teams.
  tags:
  - itsm
  - sla
  - servicenow
  - microsoft-teams
  - escalation
capability:
  exposes:
  - type: mcp
    namespace: itsm-sla
    port: 8080
    tools:
    - name: escalate-sla-breach
      description: Given a ServiceNow incident number that has breached its SLA, update the ticket priority, reassign it to tier-2 support, and notify the IT operations manager in Microsoft Teams.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number that has breached its SLA (e.g. INC0012345).
      - name: breach_minutes
        in: body
        type: integer
        description: Number of minutes the SLA has been breached.
      - name: it_manager_upn
        in: body
        type: string
        description: Microsoft 365 UPN of the IT operations manager to notify.
      steps:
      - name: escalate-ticket
        type: call
        call: servicenow.update-incident
        with:
          number: '{{incident_number}}'
          priority: 1
          assigned_group: IT_Tier2
          work_notes: SLA breached by {{breach_minutes}} minutes. Escalated to Tier 2.
      - name: notify-it-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{it_manager_upn}}'
          text: 'SLA breach: {{incident_number}} is {{breach_minutes}}min overdue and has been escalated to Tier 2.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.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: update-incident
        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 → servicenow-ticket-sla-breach-escalation.yml

Retrieves a contract summary from SAP Ariba by contract ID for procurement compliance queries.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Lookup
  description: Retrieves a contract summary from SAP Ariba by contract ID for procurement compliance queries.
  tags:
  - procurement
  - sap-ariba
  - contracts
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: get-contract-summary
      description: Given a SAP Ariba contract ID, return the contract title, status, and expiration date.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: SAP Ariba contract workspace ID.
      call: ariba.get-contract
      with:
        contractId: '{{contract_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: status
        type: string
        mapping: $.status
      - name: expiration_date
        type: string
        mapping: $.expirationDate
  consumes:
  - type: http
    namespace: ariba
    baseUri: https://openapi.ariba.com/api/contract-compliance/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts/{{contractId}}
      inputParameters:
      - name: contractId
        in: path
      operations:
      - name: get-contract
        method: GET
Open in Framework → View in Fleet → sap-ariba-contract-lookup.yml

When a ServiceNow change request is approved, triggers a GitHub Actions deployment workflow and updates the change request with deployment status.

naftiko: '0.5'
info:
  label: ServiceNow Change to GitHub Deployment
  description: When a ServiceNow change request is approved, triggers a GitHub Actions deployment workflow and updates the change request with deployment status.
  tags:
  - itsm
  - servicenow
  - github
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: trigger-deployment-from-change
      description: Given an approved ServiceNow change number, trigger GitHub deployment and update change record.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: ServiceNow change request number.
      - name: repo
        in: body
        type: string
        description: GitHub repository to deploy.
      - name: environment
        in: body
        type: string
        description: Target deployment environment.
      steps:
      - name: trigger-deploy
        type: call
        call: github.create-dispatch
        with:
          owner: dell-technologies
          repo: '{{repo}}'
          event_type: deploy
          environment: '{{environment}}'
      - name: update-change
        type: call
        call: servicenow.update-change
        with:
          number: '{{change_number}}'
          work_notes: Deployment triggered for {{repo}} to {{environment}}
      - name: notify-ops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_ops_team_id
          channel_id: $secrets.teams_deployments_channel_id
          text: 'Deployment triggered: {{repo}} -> {{environment}} | Change: {{change_number}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dispatches
      path: /repos/{{owner}}/{{repo}}/dispatches
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: create-dispatch
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://dell.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: 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: send-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-to-github-deployment.yml

When an SAP payment run completes, sends payment remittance details to the vendor management team and updates Salesforce vendor records.

naftiko: '0.5'
info:
  label: SAP Payment Run to Vendor Notification
  description: When an SAP payment run completes, sends payment remittance details to the vendor management team and updates Salesforce vendor records.
  tags:
  - finance
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: accounts-payable
    port: 8080
    tools:
    - name: handle-payment-run
      description: Given a completed payment run, notify vendor management and update records.
      inputParameters:
      - name: payment_run_id
        in: body
        type: string
        description: SAP payment run ID.
      - name: vendor_id
        in: body
        type: string
        description: Vendor ID.
      - name: payment_amount
        in: body
        type: number
        description: Total payment amount.
      steps:
      - name: update-sf-vendor
        type: call
        call: salesforce.update-account
        with:
          Vendor_ID__c: '{{vendor_id}}'
          Last_Payment__c: '{{payment_amount}}'
      - name: notify-ap
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_finance_team_id
          channel_id: $secrets.teams_ap_channel_id
          text: 'Payment completed: Run {{payment_run_id}} | Vendor: {{vendor_id}} | Amount: ${{payment_amount}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account
      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-channel-message
        method: POST
Open in Framework → View in Fleet → sap-payment-run-to-vendor-notification.yml

When all stories in a Jira epic are completed, generates a summary in Confluence and sends a stakeholder update in Microsoft Teams.

naftiko: '0.5'
info:
  label: Jira Epic Completion to Stakeholder Update
  description: When all stories in a Jira epic are completed, generates a summary in Confluence and sends a stakeholder update in Microsoft Teams.
  tags:
  - project-management
  - jira
  - confluence
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: stakeholder-comms
    port: 8080
    tools:
    - name: handle-epic-completion
      description: Given a completed Jira epic, generate a summary and notify stakeholders.
      inputParameters:
      - name: epic_key
        in: body
        type: string
        description: Jira epic key.
      - name: epic_summary
        in: body
        type: string
        description: Epic summary.
      - name: story_count
        in: body
        type: integer
        description: Number of completed stories.
      steps:
      - name: create-summary
        type: call
        call: confluence.create-page
        with:
          spaceKey: PROJ
          title: 'Epic Complete: {{epic_key}} - {{epic_summary}}'
          body: '{{story_count}} stories completed for {{epic_key}}: {{epic_summary}}'
      - name: notify-stakeholders
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_product_team_id
          channel_id: $secrets.teams_stakeholders_channel_id
          text: 'Epic Complete: {{epic_key}} - {{epic_summary}} | {{story_count}} stories | Summary: {{create-summary.id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://dell.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → jira-epic-completion-to-stakeholder-update.yml

Retrieves a Salesforce enterprise customer account record and returns key health indicators including open cases, last activity, and contract status for account management review.

naftiko: '0.5'
info:
  label: Salesforce Customer Account Health Review
  description: Retrieves a Salesforce enterprise customer account record and returns key health indicators including open cases, last activity, and contract status for account management review.
  tags:
  - sales
  - crm
  - salesforce
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: account-management
    port: 8080
    tools:
    - name: get-account-health
      description: Given a Salesforce account ID, retrieve the account's health indicators including open support cases, last activity date, and active contract status. Use for quarterly business reviews and customer success planning.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID for the enterprise customer.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: account_name
        type: string
        mapping: $.Name
      - name: owner_name
        type: string
        mapping: $.Owner.Name
      - name: last_activity_date
        type: string
        mapping: $.LastActivityDate
      - name: annual_revenue
        type: number
        mapping: $.AnnualRevenue
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.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-customer-account-health-review.yml

When a Datadog synthetic test fails, creates a ServiceNow incident and triggers a PagerDuty alert for the web operations team.

naftiko: '0.5'
info:
  label: Datadog Synthetic Failure to Incident
  description: When a Datadog synthetic test fails, creates a ServiceNow incident and triggers a PagerDuty alert for the web operations team.
  tags:
  - observability
  - datadog
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: synthetic-monitoring
    port: 8080
    tools:
    - name: handle-synthetic-failure
      description: Given a failed synthetic test, create an incident and page web ops.
      inputParameters:
      - name: test_name
        in: body
        type: string
        description: Synthetic test name.
      - name: url
        in: body
        type: string
        description: Monitored URL.
      - name: error_message
        in: body
        type: string
        description: Test failure error message.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          category: application
          short_description: 'Synthetic test failure: {{test_name}} - {{url}}'
      - name: page-webops
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pagerduty_webops_service_id
          title: 'Synthetic Failure: {{test_name}}'
          body: 'URL: {{url}} | Error: {{error_message}} | SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → datadog-synthetic-failure-to-incident.yml

Runs daily data quality checks against core Snowflake tables and creates a Jira data quality bug if row counts or null rates fall outside acceptable thresholds.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Pipeline Monitor
  description: Runs daily data quality checks against core Snowflake tables and creates a Jira data quality bug if row counts or null rates fall outside acceptable thresholds.
  tags:
  - data
  - analytics
  - snowflake
  - jira
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-data-quality-check
      description: Given a Snowflake table name, expected minimum row count, and check date, execute the data quality check and open a Jira bug if the table fails validation.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified Snowflake table name to check (e.g. PROD.SALES.ORDERS).
      - name: expected_min_rows
        in: body
        type: integer
        description: Minimum expected row count for the check to pass.
      - name: check_date
        in: body
        type: string
        description: ISO 8601 date for the data partition being validated.
      steps:
      - name: check-row-count
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT COUNT(*) as row_count FROM {{table_name}} WHERE DATE(created_at) = '{{check_date}}'
      - name: raise-quality-bug
        type: call
        call: jira.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: 'Data quality failure: {{table_name}} on {{check_date}}'
          description: Table {{table_name}} returned {{check-row-count.row_count}} rows on {{check_date}}, below the minimum threshold of {{expected_min_rows}}.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://dell.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://dell.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-pipeline-monitor.yml

When Datadog detects an error rate spike correlated with a feature flag, creates a Jira incident for the feature team and notifies in Teams.

naftiko: '0.5'
info:
  label: Datadog Error Rate to Feature Flag Disable
  description: When Datadog detects an error rate spike correlated with a feature flag, creates a Jira incident for the feature team and notifies in Teams.
  tags:
  - observability
  - datadog
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: feature-management
    port: 8080
    tools:
    - name: handle-error-rate-spike
      description: Given a service with error rate spike and feature flag, create incident and notify.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Service name with error rate spike.
      - name: feature_flag
        in: body
        type: string
        description: Feature flag name.
      - name: error_rate
        in: body
        type: number
        description: Current error rate percentage.
      steps:
      - name: create-incident
        type: call
        call: jira.create-issue
        with:
          project_key: OPS
          issuetype: Bug
          summary: 'Error spike: {{service_name}} ({{error_rate}}%) - flag: {{feature_flag}}'
      - name: notify-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_ops_team_id
          channel_id: $secrets.teams_ops_channel_id
          text: 'Error spike: {{service_name}} at {{error_rate}}% | Flag: {{feature_flag}} | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → datadog-error-rate-to-feature-flag-disable.yml

When Datadog detects an anomalous log pattern, creates a ServiceNow security investigation and notifies the SOC via PagerDuty.

naftiko: '0.5'
info:
  label: Datadog Log Anomaly to Security Investigation
  description: When Datadog detects an anomalous log pattern, creates a ServiceNow security investigation and notifies the SOC via PagerDuty.
  tags:
  - security
  - datadog
  - servicenow
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: log-security
    port: 8080
    tools:
    - name: handle-log-anomaly
      description: Given a Datadog log anomaly, create a security investigation and page SOC.
      inputParameters:
      - name: anomaly_type
        in: body
        type: string
        description: Type of log anomaly detected.
      - name: source
        in: body
        type: string
        description: Log source.
      - name: sample_log
        in: body
        type: string
        description: Sample log entry.
      steps:
      - name: create-investigation
        type: call
        call: servicenow.create-incident
        with:
          category: security
          short_description: 'Log Anomaly: {{anomaly_type}} from {{source}}'
      - name: page-soc
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pagerduty_soc_service_id
          title: 'Log Anomaly: {{anomaly_type}} - {{source}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → datadog-log-anomaly-to-security-investigation.yml

When Salesforce Einstein predicts churn risk, creates a customer success Jira task and logs the intervention in Salesforce.

naftiko: '0.5'
info:
  label: Salesforce Churn Signal to Retention Workflow
  description: When Salesforce Einstein predicts churn risk, creates a customer success Jira task and logs the intervention in Salesforce.
  tags:
  - crm
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: retention
    port: 8080
    tools:
    - name: handle-churn-signal
      description: Given a Salesforce account with churn risk, create a retention task and notify CS team.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      - name: account_name
        in: body
        type: string
        description: Account name.
      - name: churn_probability
        in: body
        type: number
        description: Predicted churn probability.
      steps:
      - name: create-retention-task
        type: call
        call: jira.create-issue
        with:
          project_key: CS
          issuetype: Task
          summary: 'Churn Prevention: {{account_name}} ({{churn_probability}}% risk)'
      - name: notify-cs
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_cs_team_id
          channel_id: $secrets.teams_retention_channel_id
          text: 'Churn Risk: {{account_name}} | Probability: {{churn_probability}}% | Jira: {{create-retention-task.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → salesforce-churn-signal-to-retention-workflow.yml

When a delivery is confirmed in SAP, updates the Salesforce order record and sends a delivery notification to the customer success team.

naftiko: '0.5'
info:
  label: SAP Delivery Confirmation to Salesforce Update
  description: When a delivery is confirmed in SAP, updates the Salesforce order record and sends a delivery notification to the customer success team.
  tags:
  - logistics
  - sap
  - salesforce
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: order-fulfillment
    port: 8080
    tools:
    - name: handle-delivery-confirmation
      description: Given a SAP delivery number, update Salesforce order and notify customer success.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: SAP delivery document number.
      - name: order_id
        in: body
        type: string
        description: Salesforce order ID.
      - name: tracking_number
        in: body
        type: string
        description: Shipment tracking number.
      steps:
      - name: update-sf-order
        type: call
        call: salesforce.update-order
        with:
          id: '{{order_id}}'
          Delivery_Status__c: Shipped
          Tracking__c: '{{tracking_number}}'
      - name: notify-cs
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_cs_team_id
          channel_id: $secrets.teams_fulfillment_channel_id
          text: 'Delivery confirmed: {{delivery_number}} | Order: {{order_id}} | Tracking: {{tracking_number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: orders
      path: /sobjects/Order/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: update-order
        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-channel-message
        method: POST
Open in Framework → View in Fleet → sap-delivery-confirmation-to-salesforce-update.yml

When an employee is terminated in Workday, disables their Microsoft 365 account via Microsoft Graph, resolves their open ServiceNow tickets, and notifies IT security in Teams.

naftiko: '0.5'
info:
  label: Employee Offboarding Access Revocation
  description: When an employee is terminated in Workday, disables their Microsoft 365 account via Microsoft Graph, resolves their open ServiceNow tickets, and notifies IT security in Teams.
  tags:
  - hr
  - offboarding
  - workday
  - microsoft-365
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: revoke-employee-access
      description: Given a Workday employee ID and their Microsoft 365 UPN, disable their M365 account, update their ServiceNow user record, and notify IT security in Microsoft Teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the terminated employee.
      - name: upn
        in: body
        type: string
        description: Microsoft 365 user principal name of the terminated employee.
      steps:
      - name: disable-m365-user
        type: call
        call: msgraph.disable-user
        with:
          user_id: '{{upn}}'
          accountEnabled: false
      - name: create-offboarding-ticket
        type: call
        call: servicenow.create-incident
        with:
          category: hr_offboarding
          short_description: 'Employee offboarding: {{upn}}'
          assigned_group: IT_Security
      - name: notify-security
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_security_team_id
          channel_id: $secrets.teams_security_channel_id
          text: 'Offboarding complete: {{upn}} (Workday: {{workday_employee_id}}) | M365 disabled | SNOW: {{create-offboarding-ticket.number}}'
  consumes:
  - 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: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → employee-offboarding-access-revocation.yml

When a promotion is processed in Workday, updates Okta group memberships and creates a ServiceNow access request for elevated permissions.

naftiko: '0.5'
info:
  label: Workday Promotion to Access Upgrade
  description: When a promotion is processed in Workday, updates Okta group memberships and creates a ServiceNow access request for elevated permissions.
  tags:
  - hr
  - workday
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-management
    port: 8080
    tools:
    - name: handle-promotion-access
      description: Given a promoted employee ID and new role, update Okta groups and create access request.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: new_role
        in: body
        type: string
        description: New job role title.
      - name: email
        in: body
        type: string
        description: Employee email address.
      steps:
      - name: update-okta-groups
        type: call
        call: okta.update-user-groups
        with:
          login: '{{email}}'
          new_role: '{{new_role}}'
      - name: create-access-req
        type: call
        call: servicenow.create-request
        with:
          category: access_request
          short_description: Access upgrade for {{email}} - promoted to {{new_role}}
      - name: notify-it-sec
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_it_team_id
          channel_id: $secrets.teams_access_channel_id
          text: 'Promotion access update: {{email}} -> {{new_role}} | SNOW: {{create-access-req.number}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://dell.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{login}}/groups
      inputParameters:
      - name: login
        in: path
      operations:
      - name: update-user-groups
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://dell.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: 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 → workday-promotion-to-access-upgrade.yml

When a high-value Salesforce lead submits a product feature request, creates a Jira feature ticket and notifies the product team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Lead to Jira Feature Request
  description: When a high-value Salesforce lead submits a product feature request, creates a Jira feature ticket and notifies the product team in Microsoft Teams.
  tags:
  - crm
  - salesforce
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: product-feedback
    port: 8080
    tools:
    - name: create-feature-request-from-lead
      description: Given a Salesforce lead ID and feature description, create a Jira feature request and notify the product team.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Salesforce lead ID.
      - name: feature_summary
        in: body
        type: string
        description: Summary of the requested feature.
      - name: feature_description
        in: body
        type: string
        description: Detailed description of the feature request.
      steps:
      - name: get-lead
        type: call
        call: salesforce.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: PROD
          issuetype: Story
          summary: 'Feature Request: {{feature_summary}}'
          description: 'Requested by {{get-lead.Name}} ({{get-lead.Company}}): {{feature_description}}'
      - name: notify-product
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_product_team_id
          channel_id: $secrets.teams_product_channel_id
          text: 'New feature request from {{get-lead.Company}}: {{feature_summary}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.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: jira
    baseUri: https://dell.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/{{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 → salesforce-lead-to-jira-feature-request.yml

When Snowflake credit consumption spikes above threshold, creates a Jira investigation ticket and alerts the FinOps team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Cost Spike to FinOps Alert
  description: When Snowflake credit consumption spikes above threshold, creates a Jira investigation ticket and alerts the FinOps team in Microsoft Teams.
  tags:
  - finops
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finops
    port: 8080
    tools:
    - name: handle-cost-spike
      description: Given Snowflake warehouse and credit usage, create a Jira ticket and notify FinOps.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: Snowflake warehouse name.
      - name: credits_used
        in: body
        type: number
        description: Credits consumed in the period.
      - name: threshold
        in: body
        type: number
        description: Credit threshold that was exceeded.
      steps:
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: FINOPS
          issuetype: Task
          summary: 'Snowflake cost spike: {{warehouse_name}} ({{credits_used}} credits)'
          description: Warehouse {{warehouse_name}} consumed {{credits_used}} credits, exceeding threshold of {{threshold}}.
      - name: notify-finops
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_finops_team_id
          channel_id: $secrets.teams_finops_channel_id
          text: 'Snowflake Cost Spike: {{warehouse_name}} | Credits: {{credits_used}} (threshold: {{threshold}}) | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → snowflake-cost-spike-to-finops-alert.yml

Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor, and total value for procurement and finance teams.

naftiko: '0.5'
info:
  label: SAP S/4HANA Purchase Order Lookup
  description: Looks up a SAP S/4HANA purchase order by PO number and returns header status, vendor, and total value for procurement and finance teams.
  tags:
  - finance
  - procurement
  - sap
  - erp
capability:
  exposes:
  - type: mcp
    namespace: erp
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a SAP purchase order number, retrieve the PO header status, vendor name, total amount, and open line items from SAP S/4HANA. Use for procurement approvals and financial audits.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: 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://dell-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-s-4hana-purchase-order-lookup.yml

Looks up a configuration item in the ServiceNow CMDB by hostname or asset tag and returns the full CI record for use in incident response and change management.

naftiko: '0.5'
info:
  label: ServiceNow CMDB Asset Lookup
  description: Looks up a configuration item in the ServiceNow CMDB by hostname or asset tag and returns the full CI record for use in incident response and change management.
  tags:
  - itsm
  - cmdb
  - servicenow
  - asset-management
capability:
  exposes:
  - type: mcp
    namespace: cmdb
    port: 8080
    tools:
    - name: get-configuration-item
      description: Given a hostname or asset tag, retrieve the matching ServiceNow CMDB configuration item record including owner, location, and support group. Use during incident response to identify CI ownership.
      inputParameters:
      - name: hostname
        in: body
        type: string
        description: Hostname or asset tag of the configuration item to look up.
      call: servicenow.get-ci
      with:
        name: '{{hostname}}'
      outputParameters:
      - name: ci_name
        type: string
        mapping: $.result.name
      - name: support_group
        type: string
        mapping: $.result.support_group.display_value
      - name: environment
        type: string
        mapping: $.result.environment
      - name: operational_status
        type: string
        mapping: $.result.operational_status.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb-ci
      path: /table/cmdb_ci_server
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-ci
        method: GET
Open in Framework → View in Fleet → servicenow-cmdb-asset-lookup.yml

When an Azure DevOps release pipeline is triggered, creates a ServiceNow standard change request and notifies the CAB in Microsoft Teams.

naftiko: '0.5'
info:
  label: Azure DevOps Release to ServiceNow Change
  description: When an Azure DevOps release pipeline is triggered, creates a ServiceNow standard change request and notifies the CAB in Microsoft Teams.
  tags:
  - devops
  - azure-devops
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: create-change-from-release
      description: Given an Azure DevOps release, create a ServiceNow change request and notify CAB.
      inputParameters:
      - name: release_name
        in: body
        type: string
        description: Release pipeline name.
      - name: environment
        in: body
        type: string
        description: Target environment.
      - name: release_id
        in: body
        type: string
        description: Release ID.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          type: standard
          short_description: 'Release: {{release_name}} to {{environment}} ({{release_id}})'
      - name: notify-cab
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_ops_team_id
          channel_id: $secrets.teams_cab_channel_id
          text: 'Release Change: {{release_name}} -> {{environment}} | SNOW: {{create-change.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.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.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 → azure-devops-release-to-servicenow-change.yml

Checks the last refresh status of a Power BI dataset to verify data currency for reporting.

naftiko: '0.5'
info:
  label: Power BI Dataset Refresh Status
  description: Checks the last refresh status of a Power BI dataset to verify data currency for reporting.
  tags:
  - analytics
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: analytics
    port: 8080
    tools:
    - name: get-dataset-refresh-status
      description: Given a Power BI workspace and dataset ID, return the last refresh status and completion time.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Power BI workspace ID.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      call: powerbi.get-refresh-history
      with:
        groupId: '{{workspace_id}}'
        datasetId: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
      - 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: refreshes
      path: /groups/{{groupId}}/datasets/{{datasetId}}/refreshes
      inputParameters:
      - name: groupId
        in: path
      - name: datasetId
        in: path
      operations:
      - name: get-refresh-history
        method: GET
Open in Framework → View in Fleet → power-bi-dataset-refresh-status.yml

When a new headcount requisition is created in Workday, creates a Jira approval task for the hiring committee and notifies the talent acquisition team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Workday Recruiting Position Approval
  description: When a new headcount requisition is created in Workday, creates a Jira approval task for the hiring committee and notifies the talent acquisition team in Microsoft Teams.
  tags:
  - hr
  - recruiting
  - workday
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: initiate-headcount-approval
      description: Given a Workday requisition ID, job title, and department, create a Jira approval task and notify the talent acquisition Microsoft Teams channel to begin the hiring process.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: Workday position requisition ID.
      - name: job_title
        in: body
        type: string
        description: Job title for the open position.
      - name: department
        in: body
        type: string
        description: Department requesting the headcount.
      steps:
      - name: create-approval-task
        type: call
        call: jira.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: 'Headcount approval: {{job_title}} in {{department}}'
          description: Workday requisition {{requisition_id}} for {{job_title}} in {{department}} requires committee approval before posting.
      - name: notify-ta-team
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_hr_team_id
          channel_id: $secrets.teams_ta_channel_id
          text: 'New headcount request: {{job_title}} in {{department}} | Jira: {{create-approval-task.key}} | Workday req: {{requisition_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → workday-recruiting-position-approval.yml

When a Workday organizational restructure is processed, triggers an Okta access review and creates a ServiceNow audit ticket for compliance.

naftiko: '0.5'
info:
  label: Workday Org Change to Access Review
  description: When a Workday organizational restructure is processed, triggers an Okta access review and creates a ServiceNow audit ticket for compliance.
  tags:
  - compliance
  - workday
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: compliance
    port: 8080
    tools:
    - name: handle-org-change
      description: Given a Workday org change event, trigger access review and create compliance ticket.
      inputParameters:
      - name: org_unit
        in: body
        type: string
        description: Organizational unit affected.
      - name: change_type
        in: body
        type: string
        description: Type of organizational change.
      - name: effective_date
        in: body
        type: string
        description: Change effective date.
      steps:
      - name: create-audit-ticket
        type: call
        call: servicenow.create-incident
        with:
          category: compliance
          short_description: 'Org change access review: {{org_unit}} - {{change_type}}'
      - name: notify-compliance
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_compliance_team_id
          channel_id: $secrets.teams_compliance_channel_id
          text: 'Org Change: {{org_unit}} | {{change_type}} | Effective: {{effective_date}} | SNOW: {{create-audit-ticket.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://dell.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → workday-org-change-to-access-review.yml

When a quality inspection in SAP places goods on hold, creates a Jira quality issue and notifies the procurement team in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Quality Hold to Supplier Notification
  description: When a quality inspection in SAP places goods on hold, creates a Jira quality issue and notifies the procurement team in Microsoft Teams.
  tags:
  - quality
  - sap
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: quality-management
    port: 8080
    tools:
    - name: handle-quality-hold
      description: Given a SAP quality inspection with hold, create a quality issue and notify.
      inputParameters:
      - name: inspection_lot
        in: body
        type: string
        description: SAP inspection lot number.
      - name: material
        in: body
        type: string
        description: Material number.
      - name: vendor_id
        in: body
        type: string
        description: Supplier vendor ID.
      - name: defect_description
        in: body
        type: string
        description: Quality defect description.
      steps:
      - name: create-quality-issue
        type: call
        call: jira.create-issue
        with:
          project_key: QA
          issuetype: Bug
          summary: 'Quality Hold: {{material}} - {{defect_description}}'
          description: 'Inspection lot: {{inspection_lot}} | Vendor: {{vendor_id}}'
      - name: notify-procurement
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_procurement_team_id
          channel_id: $secrets.teams_quality_channel_id
          text: 'Quality Hold: {{material}} | Vendor: {{vendor_id}} | {{defect_description}} | Jira: {{create-quality-issue.key}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://dell.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/{{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 → sap-quality-hold-to-supplier-notification.yml

When an employee's role changes in Workday, updates their Microsoft 365 group memberships via Microsoft Graph and creates a ServiceNow task to review access rights.

naftiko: '0.5'
info:
  label: Workday Role Change Access Reprovisioning
  description: When an employee's role changes in Workday, updates their Microsoft 365 group memberships via Microsoft Graph and creates a ServiceNow task to review access rights.
  tags:
  - hr
  - access-management
  - workday
  - microsoft-365
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-provisioning
    port: 8080
    tools:
    - name: reprovision-role-change
      description: Given a Workday employee ID and their new role, update Microsoft 365 security group memberships and create a ServiceNow access review task for IT security to validate the permission changes.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID of the employee changing roles.
      - name: upn
        in: body
        type: string
        description: Microsoft 365 UPN of the employee.
      - name: old_group_id
        in: body
        type: string
        description: Microsoft 365 group ID of the employee's current role group.
      - name: new_group_id
        in: body
        type: string
        description: Microsoft 365 group ID of the employee's new role group.
      - name: new_role_title
        in: body
        type: string
        description: New job title for context in the ServiceNow task.
      steps:
      - name: remove-old-group
        type: call
        call: msgraph.remove-group-member
        with:
          group_id: '{{old_group_id}}'
          user_id: '{{upn}}'
      - name: add-new-group
        type: call
        call: msgraph-new.add-group-member
        with:
          group_id: '{{new_group_id}}'
          user_id: '{{upn}}'
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          category: access_review
          short_description: 'Access review: {{upn}} role change to {{new_role_title}}'
          assigned_group: IT_Security
  consumes:
  - type: http
    namespace: msgraph
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: group-members
      path: /groups/{{group_id}}/members/{{user_id}}/$ref
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: remove-group-member
        method: DELETE
  - type: http
    namespace: msgraph-new
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_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: servicenow
    baseUri: https://dell.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-role-change-access-reprovisioning.yml

Pulls Salesforce campaign performance metrics for a given quarter and posts a digest summary to the marketing Microsoft Teams channel for leadership review.

naftiko: '0.5'
info:
  label: Salesforce Marketing Campaign Performance Digest
  description: Pulls Salesforce campaign performance metrics for a given quarter and posts a digest summary to the marketing Microsoft Teams channel for leadership review.
  tags:
  - marketing
  - salesforce
  - reporting
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: marketing-reporting
    port: 8080
    tools:
    - name: digest-campaign-performance
      description: Given a Salesforce campaign type and date range, retrieve performance metrics across all active campaigns and post a summary digest to the marketing Microsoft Teams channel.
      inputParameters:
      - name: campaign_type
        in: body
        type: string
        description: Salesforce campaign type to filter (e.g. Email, Webinar, Trade Show).
      - name: start_date
        in: body
        type: string
        description: ISO 8601 start date for the performance report.
      - name: end_date
        in: body
        type: string
        description: ISO 8601 end date for the performance report.
      steps:
      - name: query-campaigns
        type: call
        call: salesforce.search-campaigns
        with:
          type: '{{campaign_type}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: post-digest
        type: call
        call: msteams.send-channel-message
        with:
          team_id: $secrets.teams_marketing_team_id
          channel_id: $secrets.teams_marketing_channel_id
          text: 'Campaign digest ({{campaign_type}}) for {{start_date}} to {{end_date}}: {{query-campaigns.total}} campaigns found. Total responses: {{query-campaigns.total_responses}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://dell.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: campaigns
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: search-campaigns
        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: send-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-marketing-campaign-performance-digest.yml

Retrieves the current status and last login timestamp of an Okta user by email address.

naftiko: '0.5'
info:
  label: Okta User Status Lookup
  description: Retrieves the current status and last login timestamp of an Okta user by email address.
  tags:
  - identity
  - okta
  - security
capability:
  exposes:
  - type: mcp
    namespace: identity
    port: 8080
    tools:
    - name: get-user-status
      description: Given an email address, retrieve the Okta user status, last login, and MFA enrollment state.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Email address of the Okta user.
      call: okta.get-user
      with:
        login: '{{email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: last_login
        type: string
        mapping: $.lastLogin
      - name: user_id
        type: string
        mapping: $.id
  consumes:
  - type: http
    namespace: okta
    baseUri: https://dell.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{login}}
      inputParameters:
      - name: login
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → okta-user-status-lookup.yml

Retrieves an employee's payroll record from Oracle Financials by employee ID, returning salary, pay frequency, tax withholdings, and last pay date.

naftiko: '0.5'
info:
  label: Employee Payroll Record Lookup
  description: Retrieves an employee's payroll record from Oracle Financials by employee ID, returning salary, pay frequency, tax withholdings, and last pay date.
  tags:
  - payroll
  - oracle-financials
capability:
  exposes:
  - type: mcp
    namespace: payroll
    port: 8080
    tools:
    - name: get-payroll-record
      description: Look up an employee's payroll details. Returns salary, pay frequency, withholdings, and last pay date.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee identifier.
      call: oracle-financials.get-payroll
      with:
        employee_id: '{{employee_id}}'
  consumes:
  - type: http
    namespace: oracle-financials
    baseUri: https://gusto.oraclecloud.com/hcmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_financials_token
    resources:
    - name: payroll
      path: /payrollRelationships?q=PersonNumber={{employee_id}}
      inputParameters:
      - name: employee_id
        in: query
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → employee-payroll-record-lookup.yml

Checks code quality at Gusto.

naftiko: '0.5'
info:
  label: SonarQube Quality Check
  description: Checks code quality at Gusto.
  tags:
  - code-quality
  - sonarqube
  - devops
capability:
  exposes:
  - type: mcp
    namespace: sq
    port: 8080
    tools:
    - name: check-quality
      description: Check quality at Gusto.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Project key.
      call: sonarqube.get-measures
      with:
        project: '{{project}}'
      outputParameters:
      - name: bugs
        type: number
        mapping: $.component.measures[0].value
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.gusto.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: measures
      path: /measures/component
      operations:
      - name: get-measures
        method: GET
Open in Framework → View in Fleet → sonarqube-quality-check.yml

Searches Gusto's Confluence knowledge base by keyword, returning matching pages for engineering docs, compliance guides, and product specs.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Search
  description: Searches Gusto's Confluence knowledge base by keyword, returning matching pages for engineering docs, compliance guides, and product specs.
  tags:
  - knowledge-management
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: knowledge-base
    port: 8080
    tools:
    - name: search-kb
      description: Search Confluence by keyword.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search keyword.
      call: confluence.search
      with:
        cql: text~"{{query}}"
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://gusto.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: search
      path: /search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-knowledge-base-search.yml

Manages security training at Gusto.

naftiko: '0.5'
info:
  label: Security Training Pipeline
  description: Manages security training at Gusto.
  tags:
  - security
  - training
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: sec-training
    port: 8080
    tools:
    - name: manage-training
      description: Manage training at Gusto.
      inputParameters:
      - name: campaign
        in: body
        type: string
        description: Campaign ID.
      steps:
      - name: untrained
        type: call
        call: lms.get-incomplete
        with:
          campaign: '{{campaign}}'
      - name: remind
        type: call
        call: email.batch
        with:
          to: '{{untrained.emails}}'
          subject: Training due
      - name: track
        type: call
        call: lms.get-completion
        with:
          campaign: '{{campaign}}'
      - name: report
        type: call
        call: power-bi.refresh
        with:
          dataset: training
  consumes:
  - type: http
    namespace: lms
    baseUri: https://lms.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.lms_token
    resources:
    - name: campaigns
      path: /campaigns/{{campaign}}/incomplete
      inputParameters:
      - name: campaign
        in: path
      operations:
      - name: get-incomplete
        method: GET
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: batch
      path: /send-batch
      operations:
      - name: batch
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → security-training-pipeline.yml

Generates KPI digest at Gusto from Snowflake, Oracle, Power BI, and email.

naftiko: '0.5'
info:
  label: Weekly KPI Digest Pipeline
  description: Generates KPI digest at Gusto from Snowflake, Oracle, Power BI, and email.
  tags:
  - reporting
  - kpi
  - snowflake
  - executive
capability:
  exposes:
  - type: mcp
    namespace: kpi-digest
    port: 8080
    tools:
    - name: gen-digest
      description: Generate KPI digest at Gusto.
      inputParameters:
      - name: week
        in: body
        type: string
        description: Week ending.
      - name: dist
        in: body
        type: string
        description: Distribution list.
      steps:
      - name: ops
        type: call
        call: snowflake.query
        with:
          query: SELECT * FROM kpis WHERE w='{{week}}'
      - name: fin
        type: call
        call: oracle.get-summary
        with:
          period: '{{week}}'
      - name: refresh
        type: call
        call: power-bi.refresh
        with:
          dataset: exec_kpis
      - name: send
        type: call
        call: email.send
        with:
          to: '{{dist}}'
          subject: KPIs - {{week}}
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gusto.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query
        method: POST
  - type: http
    namespace: oracle
    baseUri: https://oracle.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: fin
      path: /summary
      operations:
      - name: get-summary
        method: GET
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → weekly-kpi-digest-pipeline.yml

Checks Okta user at Gusto.

naftiko: '0.5'
info:
  label: Okta User Check
  description: Checks Okta user at Gusto.
  tags:
  - identity
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: okta-user
    port: 8080
    tools:
    - name: check-user
      description: Check user at Gusto.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Email.
      call: okta.get-user
      with:
        email: '{{email}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: okta
    baseUri: https://gusto.com.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
Open in Framework → View in Fleet → okta-user-check.yml

Routes changes at Gusto through ServiceNow and CAB approval.

naftiko: '0.5'
info:
  label: Change Management Pipeline
  description: Routes changes at Gusto through ServiceNow and CAB approval.
  tags:
  - change-management
  - servicenow
  - itil
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: process-change
      description: Process changes at Gusto.
      inputParameters:
      - name: change_id
        in: body
        type: string
        description: Change ID.
      - name: date
        in: body
        type: string
        description: Date.
      steps:
      - name: get
        type: call
        call: servicenow.get-change
        with:
          id: '{{change_id}}'
      - name: conflicts
        type: call
        call: servicenow.check-conflicts
        with:
          date: '{{date}}'
      - name: submit
        type: call
        call: servicenow.update
        with:
          id: '{{change_id}}'
          state: approval
      - name: notify
        type: call
        call: email.send
        with:
          to: cab@co.com
          subject: 'CAB: {{change_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: changes
      path: /table/change_request/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-change
        method: GET
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → change-management-pipeline.yml

Checks Snowflake warehouse usage at Gusto.

naftiko: '0.5'
info:
  label: Snowflake Warehouse Usage
  description: Checks Snowflake warehouse usage at Gusto.
  tags:
  - data
  - snowflake
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: sf-usage
    port: 8080
    tools:
    - name: check-warehouse
      description: Check warehouse at Gusto.
      inputParameters:
      - name: warehouse
        in: body
        type: string
        description: Warehouse.
      call: snowflake.get-usage
      with:
        warehouse: '{{warehouse}}'
      outputParameters:
      - name: credits
        type: number
        mapping: $.data.credits_used
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gusto.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: warehouses
      path: /statements
      operations:
      - name: get-usage
        method: GET
Open in Framework → View in Fleet → snowflake-warehouse-usage.yml

Retrieves SharePoint metadata at Gusto.

naftiko: '0.5'
info:
  label: SharePoint File Metadata
  description: Retrieves SharePoint metadata at Gusto.
  tags:
  - document-management
  - sharepoint
  - collaboration
capability:
  exposes:
  - type: mcp
    namespace: sp-docs
    port: 8080
    tools:
    - name: get-file
      description: Look up file at Gusto.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: Site ID.
      - name: file_path
        in: body
        type: string
        description: Path.
      call: sharepoint.get-file
      with:
        site_id: '{{site_id}}'
        path: '{{file_path}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: size
        type: number
        mapping: $.size
  consumes:
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: files
      path: /sites/{{site_id}}/drive/root:/{{path}}
      inputParameters:
      - name: site_id
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → sharepoint-file-metadata.yml

Analyzes feedback at Gusto via surveys, AI sentiment, and Power BI.

naftiko: '0.5'
info:
  label: Customer Feedback Pipeline
  description: Analyzes feedback at Gusto via surveys, AI sentiment, and Power BI.
  tags:
  - customer-experience
  - analytics
  - sentiment-analysis
capability:
  exposes:
  - type: mcp
    namespace: feedback
    port: 8080
    tools:
    - name: analyze
      description: Analyze feedback at Gusto.
      inputParameters:
      - name: survey_id
        in: body
        type: string
        description: Survey ID.
      steps:
      - name: collect
        type: call
        call: survey.get
        with:
          id: '{{survey_id}}'
      - name: sentiment
        type: call
        call: ai.analyze
        with:
          text: '{{collect.responses}}'
      - name: themes
        type: call
        call: ai.themes
        with:
          data: '{{collect.responses}}'
      - name: dashboard
        type: call
        call: power-bi.refresh
        with:
          dataset: cx
  consumes:
  - type: http
    namespace: survey
    baseUri: https://surveys.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.survey_token
    resources:
    - name: responses
      path: /surveys/{{id}}/responses
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get
        method: GET
  - type: http
    namespace: ai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: analyze
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → customer-feedback-pipeline.yml

Checks license compliance at Gusto via scanning, entitlements, and procurement.

naftiko: '0.5'
info:
  label: License Compliance Pipeline
  description: Checks license compliance at Gusto via scanning, entitlements, and procurement.
  tags:
  - compliance
  - licensing
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: license-comp
    port: 8080
    tools:
    - name: check-licenses
      description: Check license compliance at Gusto.
      inputParameters:
      - name: software
        in: body
        type: string
        description: Software.
      - name: vendor
        in: body
        type: string
        description: Vendor.
      steps:
      - name: scan
        type: call
        call: assets.installations
        with:
          sw: '{{software}}'
      - name: entitlements
        type: call
        call: licenses.get
        with:
          sw: '{{software}}'
      - name: flag
        type: call
        call: compliance.flag
        with:
          installed: '{{scan.count}}'
          entitled: '{{entitlements.count}}'
      - name: procure
        type: call
        call: servicenow.create-request
        with:
          type: license
          sw: '{{software}}'
  consumes:
  - type: http
    namespace: assets
    baseUri: https://assets.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.asset_token
    resources:
    - name: installations
      path: /installations
      operations:
      - name: installations
        method: GET
  - type: http
    namespace: licenses
    baseUri: https://licenses.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.license_token
    resources:
    - name: ent
      path: /entitlements
      operations:
      - name: get
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://compliance.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: overages
      path: /flag
      operations:
      - name: flag
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.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
Open in Framework → View in Fleet → license-compliance-pipeline.yml

Plans capacity at Gusto by collecting utilization and forecasting.

naftiko: '0.5'
info:
  label: Capacity Planning Pipeline
  description: Plans capacity at Gusto by collecting utilization and forecasting.
  tags:
  - infrastructure
  - capacity-planning
  - forecasting
capability:
  exposes:
  - type: mcp
    namespace: capacity
    port: 8080
    tools:
    - name: plan-capacity
      description: Plan capacity at Gusto.
      inputParameters:
      - name: resource
        in: body
        type: string
        description: Resource type.
      - name: months
        in: body
        type: number
        description: Forecast months.
      steps:
      - name: util
        type: call
        call: monitoring.get-util
        with:
          resource: '{{resource}}'
      - name: forecast
        type: call
        call: analytics.forecast
        with:
          current: '{{util.pct}}'
          months: '{{months}}'
      - name: procure
        type: call
        call: servicenow.create-request
        with:
          type: capacity
          resource: '{{resource}}'
      - name: dashboard
        type: call
        call: power-bi.refresh
        with:
          dataset: capacity
  consumes:
  - type: http
    namespace: monitoring
    baseUri: https://monitoring.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.monitoring_token
    resources:
    - name: util
      path: /resources/{{resource}}/util
      inputParameters:
      - name: resource
        in: path
      operations:
      - name: get-util
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: forecast
      path: /demand
      operations:
      - name: forecast
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.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: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → capacity-planning-pipeline.yml

Checks SAP PO at Gusto.

naftiko: '0.5'
info:
  label: SAP PO Check
  description: Checks SAP PO at Gusto.
  tags:
  - procurement
  - sap
  - purchase-orders
capability:
  exposes:
  - type: mcp
    namespace: sap-po
    port: 8080
    tools:
    - name: get-po
      description: Check PO at Gusto.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: PO number.
      call: sap.get-po
      with:
        po_number: '{{po_number}}'
      outputParameters:
      - name: vendor
        type: string
        mapping: $.order.vendor
      - name: status
        type: string
        mapping: $.order.status
  consumes:
  - type: http
    namespace: sap
    baseUri: https://sap.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: purchase-orders
      path: /purchase-orders/{{po_number}}
      inputParameters:
      - name: po_number
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → sap-po-check.yml

Checks Power BI refresh at Gusto.

naftiko: '0.5'
info:
  label: Power BI Refresh Check
  description: Checks Power BI refresh at Gusto.
  tags:
  - analytics
  - power-bi
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: pbi-refresh
    port: 8080
    tools:
    - name: check-refresh
      description: Check refresh at Gusto.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Dataset ID.
      call: power-bi.get-refresh
      with:
        dataset_id: '{{dataset_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.value[0].status
  consumes:
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_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-refresh-check.yml

Checks release readiness at Gusto.

naftiko: '0.5'
info:
  label: Release Readiness Pipeline
  description: Checks release readiness at Gusto.
  tags:
  - release-management
  - devops
  - quality
capability:
  exposes:
  - type: mcp
    namespace: release-ready
    port: 8080
    tools:
    - name: check-release
      description: Check release at Gusto.
      inputParameters:
      - name: release_id
        in: body
        type: string
        description: Release ID.
      - name: project
        in: body
        type: string
        description: Project.
      steps:
      - name: tests
        type: call
        call: azdo.get-tests
        with:
          project: '{{project}}'
          release: '{{release_id}}'
      - name: quality
        type: call
        call: sonarqube.get-gate
        with:
          project: '{{project}}'
      - name: security
        type: call
        call: security.get-scan
        with:
          project: '{{project}}'
      - name: doc
        type: call
        call: confluence.create-page
        with:
          title: Release - {{release_id}}
          body: 'Tests: {{tests.pass_rate}}% Quality: {{quality.status}}'
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/gusto.com
    authentication:
      type: bearer
      token: $secrets.azdo_token
    resources:
    - name: tests
      path: /{{project}}/_apis/test/runs
      inputParameters:
      - name: project
        in: path
      operations:
      - name: get-tests
        method: GET
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.gusto.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality
      path: /qualitygates/project_status
      operations:
      - name: get-gate
        method: GET
  - type: http
    namespace: security
    baseUri: https://security.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.security_token
    resources:
    - name: scans
      path: /results
      operations:
      - name: get-scan
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://gusto.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → release-readiness-pipeline.yml

When Sentry detects a new error spike, creates a Jira bug ticket, posts the error details to the engineering Slack channel, and logs the incident in Confluence.

naftiko: '0.5'
info:
  label: Sentry Error Alert Pipeline
  description: When Sentry detects a new error spike, creates a Jira bug ticket, posts the error details to the engineering Slack channel, and logs the incident in Confluence.
  tags:
  - engineering
  - error-tracking
  - sentry-system
  - jira
  - slack
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: error-response
    port: 8080
    tools:
    - name: handle-error-spike
      description: Given a Sentry issue ID and error details, create Jira bug, notify engineering, and document.
      inputParameters:
      - name: sentry_issue_id
        in: body
        type: string
        description: The Sentry issue ID.
      - name: error_title
        in: body
        type: string
        description: The error title.
      - name: error_count
        in: body
        type: number
        description: Number of occurrences in the spike.
      - name: affected_service
        in: body
        type: string
        description: The affected service name.
      steps:
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project: ENG
          summary: 'Error spike: {{error_title}} in {{affected_service}}'
          description: 'Sentry issue: {{sentry_issue_id}}. Occurrences: {{error_count}}. Service: {{affected_service}}.'
          issue_type: Bug
          priority: High
      - name: notify-engineering
        type: call
        call: slack.post-message
        with:
          channel: engineering-alerts
          text: 'ERROR SPIKE: {{error_title}} in {{affected_service}} ({{error_count}} occurrences). Sentry: {{sentry_issue_id}}. Jira: {{create-bug.key}}.'
      - name: document-incident
        type: call
        call: confluence.create-page
        with:
          space_key: INCIDENTS
          title: 'Error Spike: {{error_title}} — {{affected_service}}'
          body: 'Sentry: {{sentry_issue_id}}. Error: {{error_title}}. Service: {{affected_service}}. Count: {{error_count}}. Jira: {{create-bug.key}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://gusto.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://gusto.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 → sentry-error-alert-pipeline.yml

Checks S3 bucket at Gusto.

naftiko: '0.5'
info:
  label: S3 Bucket Stats
  description: Checks S3 bucket at Gusto.
  tags:
  - storage
  - aws
  - s3
capability:
  exposes:
  - type: mcp
    namespace: s3-stats
    port: 8080
    tools:
    - name: get-bucket
      description: Get bucket stats at Gusto.
      inputParameters:
      - name: bucket
        in: body
        type: string
        description: Bucket.
      call: s3.get-stats
      with:
        bucket: '{{bucket}}'
      outputParameters:
      - name: objects
        type: number
        mapping: $.NumberOfObjects
  consumes:
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: buckets
      path: /{{bucket}}?metrics
      inputParameters:
      - name: bucket
        in: path
      operations:
      - name: get-stats
        method: GET
Open in Framework → View in Fleet → s3-bucket-stats.yml

Optimizes cloud costs at Gusto via Azure, FinOps, Jira, and Power BI.

naftiko: '0.5'
info:
  label: Cloud Cost Optimization Pipeline
  description: Optimizes cloud costs at Gusto via Azure, FinOps, Jira, and Power BI.
  tags:
  - cloud
  - cost-management
  - finops
capability:
  exposes:
  - type: mcp
    namespace: cloud-opt
    port: 8080
    tools:
    - name: optimize
      description: Optimize cloud costs at Gusto.
      inputParameters:
      - name: provider
        in: body
        type: string
        description: Provider.
      - name: range
        in: body
        type: string
        description: Range.
      steps:
      - name: spend
        type: call
        call: cloud.get-costs
        with:
          provider: '{{provider}}'
          range: '{{range}}'
      - name: savings
        type: call
        call: finops.analyze
        with:
          data: '{{spend.data}}'
      - name: action
        type: call
        call: jira.create-issue
        with:
          project: FINOPS
          summary: Save ${{savings.potential}}
      - name: report
        type: call
        call: power-bi.refresh
        with:
          dataset: cloud
  consumes:
  - type: http
    namespace: cloud
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: costs
      path: /providers/Microsoft.CostManagement/query
      operations:
      - name: get-costs
        method: POST
  - type: http
    namespace: finops
    baseUri: https://finops.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.finops_token
    resources:
    - name: analysis
      path: /savings
      operations:
      - name: analyze
        method: POST
  - type: http
    namespace: jira
    baseUri: https://gusto.com.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: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → cloud-cost-optimization-pipeline.yml

Checks GitHub repo at Gusto.

naftiko: '0.5'
info:
  label: GitHub Repo Check
  description: Checks GitHub repo at Gusto.
  tags:
  - devops
  - github
  - version-control
capability:
  exposes:
  - type: mcp
    namespace: gh-repo
    port: 8080
    tools:
    - name: get-branch
      description: Check branch at Gusto.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: Repo.
      - name: branch
        in: body
        type: string
        description: Branch.
      call: github.get-branch
      with:
        repo: '{{repo}}'
        branch: '{{branch}}'
      outputParameters:
      - name: sha
        type: string
        mapping: $.commit.sha
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branches
      path: /repos/org/{{repo}}/branches/{{branch}}
      inputParameters:
      - name: repo
        in: path
      - name: branch
        in: path
      operations:
      - name: get-branch
        method: GET
Open in Framework → View in Fleet → github-repo-check.yml

When a new hire is confirmed, creates the employee record in Salesforce, sends the offer letter via Gmail, logs the hire in the Snowflake analytics table, and notifies the hiring manager in Slack.

naftiko: '0.5'
info:
  label: Hiring Pipeline Orchestrator
  description: When a new hire is confirmed, creates the employee record in Salesforce, sends the offer letter via Gmail, logs the hire in the Snowflake analytics table, and notifies the hiring manager in Slack.
  tags:
  - hiring
  - salesforce
  - gmail
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: hiring
    port: 8080
    tools:
    - name: process-new-hire
      description: Given new hire details, create SF record, send offer, log analytics, and notify manager.
      inputParameters:
      - name: candidate_name
        in: body
        type: string
        description: The candidate's full name.
      - name: candidate_email
        in: body
        type: string
        description: The candidate's email.
      - name: position
        in: body
        type: string
        description: The job title.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: hiring_manager_slack
        in: body
        type: string
        description: The hiring manager's Slack user ID.
      steps:
      - name: create-employee-record
        type: call
        call: salesforce.create-contact
        with:
          name: '{{candidate_name}}'
          email: '{{candidate_email}}'
          title: '{{position}}'
          start_date: '{{start_date}}'
      - name: send-offer
        type: call
        call: gmail.send-email
        with:
          to: '{{candidate_email}}'
          subject: Welcome to the Team — Your Offer from Gusto
          body: Dear {{candidate_name}}, we're thrilled to offer you the position of {{position}} starting {{start_date}}. Please review and sign your offer letter.
      - name: log-analytics
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO hiring_analytics (name, email, position, start_date, created_at) VALUES ('{{candidate_name}}', '{{candidate_email}}', '{{position}}', '{{start_date}}', CURRENT_TIMESTAMP)
          warehouse: HR_WH
      - name: notify-manager
        type: call
        call: slack.post-message
        with:
          channel: '{{hiring_manager_slack}}'
          text: 'New hire confirmed: {{candidate_name}} as {{position}}, starting {{start_date}}. Offer sent. SF record: {{create-employee-record.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gusto.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: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.gmail_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://gusto.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: 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 → hiring-pipeline-orchestrator.yml

Audits expenses at Gusto via Concur, compliance checks, and email.

naftiko: '0.5'
info:
  label: Expense Audit Pipeline
  description: Audits expenses at Gusto via Concur, compliance checks, and email.
  tags:
  - finance
  - travel
  - sap-concur
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: expense-audit
    port: 8080
    tools:
    - name: audit
      description: Audit expenses at Gusto.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: Report ID.
      steps:
      - name: get
        type: call
        call: concur.get-report
        with:
          id: '{{report_id}}'
      - name: check
        type: call
        call: compliance.check
        with:
          expenses: '{{get.entries}}'
      - name: flag
        type: call
        call: workflow.flag
        with:
          id: '{{report_id}}'
          violations: '{{check.violations}}'
      - name: notify
        type: call
        call: email.send
        with:
          to: '{{get.approver}}'
          subject: Expense {{report_id}} violations
  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/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: compliance
    baseUri: https://compliance.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.compliance_token
    resources:
    - name: policies
      path: /check
      operations:
      - name: check
        method: POST
  - type: http
    namespace: workflow
    baseUri: https://workflow.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workflow_token
    resources:
    - name: reviews
      path: /flag
      operations:
      - name: flag
        method: POST
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → expense-audit-pipeline.yml

Monitors SLAs at Gusto via Datadog and Slack.

naftiko: '0.5'
info:
  label: SLA Monitoring Pipeline
  description: Monitors SLAs at Gusto via Datadog and Slack.
  tags:
  - operations
  - sla
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sla-monitor
    port: 8080
    tools:
    - name: check-sla
      description: Monitor SLAs at Gusto.
      inputParameters:
      - name: service
        in: body
        type: string
        description: Service.
      - name: target
        in: body
        type: number
        description: SLA target %.
      steps:
      - name: metrics
        type: call
        call: datadog.get-sla
        with:
          service: '{{service}}'
      - name: check
        type: call
        call: analytics.check-sla
        with:
          uptime: '{{metrics.uptime}}'
          target: '{{target}}'
      - name: alert
        type: call
        call: slack.post-message
        with:
          channel: '#ops'
          text: 'SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)'
      - name: log
        type: call
        call: servicenow.create-incident
        with:
          desc: 'SLA breach: {{service}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /metrics
      operations:
      - name: get-sla
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → sla-monitoring-pipeline.yml

Reviews vendors at Gusto.

naftiko: '0.5'
info:
  label: Quarterly Vendor Review Pipeline
  description: Reviews vendors at Gusto.
  tags:
  - procurement
  - vendor-management
  - review
capability:
  exposes:
  - type: mcp
    namespace: vendor-review
    port: 8080
    tools:
    - name: review-vendor
      description: Review vendors at Gusto.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: Vendor ID.
      - name: quarter
        in: body
        type: string
        description: Quarter.
      steps:
      - name: perf
        type: call
        call: procurement.get-metrics
        with:
          vendor: '{{vendor_id}}'
          q: '{{quarter}}'
      - name: scorecard
        type: call
        call: analytics.scorecard
        with:
          data: '{{perf.data}}'
      - name: invite
        type: call
        call: email.send
        with:
          to: '{{perf.contact}}'
          subject: QBR - {{quarter}}
      - name: schedule
        type: call
        call: calendar.create-event
        with:
          title: QBR - {{perf.name}}
  consumes:
  - type: http
    namespace: procurement
    baseUri: https://procurement.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.procurement_token
    resources:
    - name: vendors
      path: /vendors/{{vendor}}/metrics
      inputParameters:
      - name: vendor
        in: path
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: scorecards
      path: /compute
      operations:
      - name: scorecard
        method: POST
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
  - type: http
    namespace: calendar
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: events
      path: /users/proc/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → quarterly-vendor-review-pipeline.yml

When Snowflake analytics flags a customer at churn risk, retrieves their account from Salesforce, creates a retention campaign in HubSpot, assigns a Gainsight health check, and alerts the customer success team in Slack.

naftiko: '0.5'
info:
  label: Customer Churn Risk Alert Pipeline
  description: When Snowflake analytics flags a customer at churn risk, retrieves their account from Salesforce, creates a retention campaign in HubSpot, assigns a Gainsight health check, and alerts the customer success team in Slack.
  tags:
  - customer-success
  - churn
  - snowflake
  - salesforce
  - hubspot
  - gainsight
  - slack
capability:
  exposes:
  - type: mcp
    namespace: churn-prevention
    port: 8080
    tools:
    - name: process-churn-alert
      description: Given a customer account ID and risk score, retrieve account, create retention campaign, assign health check, and alert CSM.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      - name: risk_score
        in: body
        type: number
        description: The churn risk score (0-100).
      - name: risk_factors
        in: body
        type: string
        description: Comma-separated risk factors identified.
      steps:
      - name: get-account
        type: call
        call: salesforce.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-retention-campaign
        type: call
        call: hubspot.create-campaign
        with:
          name: 'Retention: {{get-account.Name}}'
          contact_email: '{{get-account.PrimaryEmail}}'
      - name: assign-health-check
        type: call
        call: gainsight.create-cta
        with:
          account_id: '{{account_id}}'
          reason: 'Churn risk score: {{risk_score}}. Factors: {{risk_factors}}'
          type: Risk
      - name: alert-csm
        type: call
        call: slack.post-message
        with:
          channel: customer-success
          text: 'CHURN RISK: {{get-account.Name}} (score: {{risk_score}}). Factors: {{risk_factors}}. Retention campaign: {{create-retention-campaign.id}}. Gainsight CTA created.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gusto.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /sobjects/Account/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: get-account
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /marketing/v3/campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: gainsight
    baseUri: https://gusto.gainsightcloud.com/v1
    authentication:
      type: bearer
      token: $secrets.gainsight_token
    resources:
    - name: ctas
      path: /cta
      operations:
      - name: create-cta
        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 → customer-churn-risk-alert-pipeline.yml

When a new SMB customer signs up, creates the account in Salesforce, sets up the Gainsight health score, sends the onboarding email series via HubSpot, creates a Zendesk welcome ticket, and notifies customer success in Slack.

naftiko: '0.5'
info:
  label: Customer Onboarding Journey Orchestrator
  description: When a new SMB customer signs up, creates the account in Salesforce, sets up the Gainsight health score, sends the onboarding email series via HubSpot, creates a Zendesk welcome ticket, and notifies customer success in Slack.
  tags:
  - customer-success
  - onboarding
  - salesforce
  - gainsight
  - hubspot
  - zendesk
  - slack
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding
    port: 8080
    tools:
    - name: onboard-customer
      description: Given company details, create SF account, Gainsight record, HubSpot enrollment, Zendesk ticket, and notify CS.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: The SMB company name.
      - name: admin_email
        in: body
        type: string
        description: The company admin email.
      - name: employee_count
        in: body
        type: number
        description: Number of employees.
      - name: plan_tier
        in: body
        type: string
        description: The Gusto plan tier.
      steps:
      - name: create-account
        type: call
        call: salesforce.create-account
        with:
          name: '{{company_name}}'
          admin_email: '{{admin_email}}'
          employee_count: '{{employee_count}}'
          plan: '{{plan_tier}}'
      - name: setup-health-score
        type: call
        call: gainsight.create-company
        with:
          account_id: '{{create-account.id}}'
          name: '{{company_name}}'
          plan: '{{plan_tier}}'
      - name: enroll-email-series
        type: call
        call: hubspot.enroll-workflow
        with:
          email: '{{admin_email}}'
          workflow_id: onboarding-series
      - name: create-welcome-ticket
        type: call
        call: zendesk.create-ticket
        with:
          subject: Welcome to Gusto — {{company_name}}
          description: 'New customer: {{company_name}}. Admin: {{admin_email}}. Employees: {{employee_count}}. Plan: {{plan_tier}}.'
          type: task
      - name: notify-cs
        type: call
        call: slack.post-message
        with:
          channel: customer-success
          text: 'New customer: {{company_name}} ({{employee_count}} employees, {{plan_tier}}). SF: {{create-account.id}}. Onboarding email enrolled. Zendesk: {{create-welcome-ticket.id}}.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gusto.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: gainsight
    baseUri: https://gusto.gainsightcloud.com/v1
    authentication:
      type: bearer
      token: $secrets.gainsight_token
    resources:
    - name: companies
      path: /companies
      operations:
      - name: create-company
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: workflows
      path: /automation/v4/flows/{{workflow_id}}/enrollments
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: enroll-workflow
        method: POST
  - type: http
    namespace: zendesk
    baseUri: https://gusto.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: 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 → customer-onboarding-journey-orchestrator.yml

Auto-routes tickets at Gusto.

naftiko: '0.5'
info:
  label: Helpdesk Auto-Routing Pipeline
  description: Auto-routes tickets at Gusto.
  tags:
  - support
  - helpdesk
  - ai
  - automation
capability:
  exposes:
  - type: mcp
    namespace: ticket-route
    port: 8080
    tools:
    - name: route-ticket
      description: Auto-route tickets at Gusto.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: Ticket ID.
      steps:
      - name: get
        type: call
        call: helpdesk.get-ticket
        with:
          id: '{{ticket_id}}'
      - name: classify
        type: call
        call: ai.classify
        with:
          subject: '{{get.subject}}'
          body: '{{get.body}}'
      - name: assign
        type: call
        call: helpdesk.assign
        with:
          id: '{{ticket_id}}'
          team: '{{classify.team}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#{{classify.team}}'
          text: 'New: {{get.subject}} ({{classify.priority}})'
  consumes:
  - type: http
    namespace: helpdesk
    baseUri: https://helpdesk.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.helpdesk_token
    resources:
    - name: tickets
      path: /tickets/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-ticket
        method: GET
  - type: http
    namespace: ai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: classify
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → helpdesk-auto-routing-pipeline.yml

Checks K8s pod health at Gusto.

naftiko: '0.5'
info:
  label: K8s Pod Health
  description: Checks K8s pod health at Gusto.
  tags:
  - containers
  - kubernetes
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: k8s-pod
    port: 8080
    tools:
    - name: check-pod
      description: Check pod at Gusto.
      inputParameters:
      - name: namespace
        in: body
        type: string
        description: Namespace.
      - name: pod
        in: body
        type: string
        description: Pod name.
      call: k8s.get-pod
      with:
        namespace: '{{namespace}}'
        pod: '{{pod}}'
      outputParameters:
      - name: phase
        type: string
        mapping: $.status.phase
  consumes:
  - type: http
    namespace: k8s
    baseUri: https://k8s.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.k8s_token
    resources:
    - name: pods
      path: /namespaces/{{namespace}}/pods/{{pod}}
      inputParameters:
      - name: namespace
        in: path
      - name: pod
        in: path
      operations:
      - name: get-pod
        method: GET
Open in Framework → View in Fleet → k8s-pod-health.yml

Runs a Postman monitor collection to health-check Gusto's public APIs and returns pass/fail results with response times.

naftiko: '0.5'
info:
  label: Postman API Health Check
  description: Runs a Postman monitor collection to health-check Gusto's public APIs and returns pass/fail results with response times.
  tags:
  - engineering
  - api-testing
  - postman
capability:
  exposes:
  - type: mcp
    namespace: api-health
    port: 8080
    tools:
    - name: run-api-health-check
      description: Trigger a Postman monitor run by monitor ID. Returns pass/fail and response times.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Postman monitor ID.
      call: postman.run-monitor
      with:
        monitor_id: '{{monitor_id}}'
  consumes:
  - type: http
    namespace: postman
    baseUri: https://api.getpostman.com
    authentication:
      type: apiKey
      name: X-Api-Key
      in: header
      value: $secrets.postman_api_key
    resources:
    - name: monitors
      path: /monitors/{{monitor_id}}/run
      inputParameters:
      - name: monitor_id
        in: path
      operations:
      - name: run-monitor
        method: POST
Open in Framework → View in Fleet → postman-api-health-check.yml

Searches Confluence at Gusto.

naftiko: '0.5'
info:
  label: Confluence Article Search
  description: Searches Confluence at Gusto.
  tags:
  - knowledge-management
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: confluence-search
    port: 8080
    tools:
    - name: search-articles
      description: Search Confluence at Gusto.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Query.
      call: confluence.search
      with:
        query: '{{query}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.results[0].title
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://gusto.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content/search
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → confluence-article-search.yml

Checks New Relic APM at Gusto.

naftiko: '0.5'
info:
  label: New Relic APM Check
  description: Checks New Relic APM at Gusto.
  tags:
  - monitoring
  - new-relic
  - apm
capability:
  exposes:
  - type: mcp
    namespace: nr-apm
    port: 8080
    tools:
    - name: check-apm
      description: Check APM at Gusto.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: App ID.
      call: newrelic.get-app
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: health
        type: string
        mapping: $.application.health_status
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.new_relic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → new-relic-apm-check.yml

Maintains KB at Gusto by finding stale articles and notifying owners.

naftiko: '0.5'
info:
  label: Knowledge Base Maintenance Pipeline
  description: Maintains KB at Gusto by finding stale articles and notifying owners.
  tags:
  - knowledge-management
  - confluence
  - maintenance
capability:
  exposes:
  - type: mcp
    namespace: kb-maint
    port: 8080
    tools:
    - name: maintain-kb
      description: Maintain KB at Gusto.
      inputParameters:
      - name: space
        in: body
        type: string
        description: Confluence space.
      - name: stale_days
        in: body
        type: number
        description: Days threshold.
      steps:
      - name: find
        type: call
        call: confluence.search-stale
        with:
          space: '{{space}}'
          days: '{{stale_days}}'
      - name: notify
        type: call
        call: email.batch
        with:
          to: '{{find.owners}}'
          subject: KB review needed
      - name: flag
        type: call
        call: confluence.add-label
        with:
          pages: '{{find.ids}}'
          label: needs-review
      - name: report
        type: call
        call: slack.post-message
        with:
          channel: '#kb'
          text: 'KB: {{find.count}} stale articles'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://gusto.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: content
      path: /content/search
      operations:
      - name: search-stale
        method: GET
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: batch
      path: /send-batch
      operations:
      - name: batch
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → knowledge-base-maintenance-pipeline.yml

Retrieves a Gusto SMB customer account from Salesforce by account ID, returning company name, plan tier, employee count, and account manager.

naftiko: '0.5'
info:
  label: Salesforce Customer Account Lookup
  description: Retrieves a Gusto SMB customer account from Salesforce by account ID, returning company name, plan tier, employee count, and account manager.
  tags:
  - crm
  - customer-management
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: crm
    port: 8080
    tools:
    - name: get-customer-account
      description: Look up an SMB customer account in Salesforce. Returns company name, plan, employee count, and owner.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      call: salesforce.get-account
      with:
        account_id: '{{account_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gusto.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-customer-account-lookup.yml

Retrieves a Jira task by issue key, returning summary, status, assignee, and priority for engineering sprint tracking.

naftiko: '0.5'
info:
  label: Jira Task Status
  description: Retrieves a Jira task by issue key, returning summary, status, assignee, and priority for engineering sprint tracking.
  tags:
  - engineering
  - project-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: eng-tasks
    port: 8080
    tools:
    - name: get-task
      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}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://gusto.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-status.yml

Reviews access at Gusto via Okta, IAM, and Jira.

naftiko: '0.5'
info:
  label: Access Review Pipeline
  description: Reviews access at Gusto via Okta, IAM, and Jira.
  tags:
  - security
  - access-management
  - okta
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: access-rev
    port: 8080
    tools:
    - name: review
      description: Review access at Gusto.
      inputParameters:
      - name: dept
        in: body
        type: string
        description: Department.
      steps:
      - name: ent
        type: call
        call: okta.get-users
        with:
          dept: '{{dept}}'
      - name: compare
        type: call
        call: iam.compare
        with:
          data: '{{ent.data}}'
      - name: flag
        type: call
        call: iam.flag
        with:
          violations: '{{compare.violations}}'
      - name: fix
        type: call
        call: jira.create-issue
        with:
          project: IAM
          summary: Violations in {{dept}}
  consumes:
  - type: http
    namespace: okta
    baseUri: https://gusto.com.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users
      operations:
      - name: get-users
        method: GET
  - type: http
    namespace: iam
    baseUri: https://iam.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.iam_token
    resources:
    - name: reviews
      path: /compare
      operations:
      - name: compare
        method: POST
  - type: http
    namespace: jira
    baseUri: https://gusto.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → access-review-pipeline.yml

Retrieves a lead record from HubSpot by email, returning lifecycle stage, lead score, company size, and last activity date for the sales team.

naftiko: '0.5'
info:
  label: HubSpot Lead Status
  description: Retrieves a lead record from HubSpot by email, returning lifecycle stage, lead score, company size, and last activity date for the sales team.
  tags:
  - sales
  - lead-management
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: sales
    port: 8080
    tools:
    - name: get-lead
      description: Look up a lead in HubSpot by email. Returns lifecycle stage, score, and company details.
      inputParameters:
      - name: email
        in: body
        type: string
        description: The lead email address.
      call: hubspot.get-contact
      with:
        email: '{{email}}'
  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: get-contact
        method: POST
Open in Framework → View in Fleet → hubspot-lead-status.yml

Retrieves an Asana project's current status including task counts, completion percentage, and milestone dates for cross-functional project tracking.

naftiko: '0.5'
info:
  label: Asana Project Status
  description: Retrieves an Asana project's current status including task counts, completion percentage, and milestone dates for cross-functional project tracking.
  tags:
  - project-management
  - asana
capability:
  exposes:
  - type: mcp
    namespace: project-mgmt
    port: 8080
    tools:
    - name: get-project-status
      description: Look up an Asana project by ID. Returns task counts, completion rate, and due date.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Asana project ID.
      call: asana.get-project
      with:
        project_id: '{{project_id}}'
  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/{{project_id}}
      inputParameters:
      - name: project_id
        in: path
      operations:
      - name: get-project
        method: GET
Open in Framework → View in Fleet → asana-project-status.yml

Tracks marketing campaigns at Gusto.

naftiko: '0.5'
info:
  label: Marketing Campaign Pipeline
  description: Tracks marketing campaigns at Gusto.
  tags:
  - marketing
  - google-ads
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: marketing
    port: 8080
    tools:
    - name: track-campaign
      description: Track campaigns at Gusto.
      inputParameters:
      - name: campaign
        in: body
        type: string
        description: Campaign ID.
      steps:
      - name: ads
        type: call
        call: google-ads.get
        with:
          id: '{{campaign}}'
      - name: social
        type: call
        call: social.get-metrics
        with:
          campaign: '{{campaign}}'
      - name: compile
        type: call
        call: analytics.compile
        with:
          ads: '{{ads.data}}'
          social: '{{social.data}}'
      - name: dashboard
        type: call
        call: power-bi.refresh
        with:
          dataset: marketing
  consumes:
  - type: http
    namespace: google-ads
    baseUri: https://googleads.googleapis.com/v14
    authentication:
      type: bearer
      token: $secrets.google_ads_token
    resources:
    - name: campaigns
      path: /campaigns/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get
        method: GET
  - type: http
    namespace: social
    baseUri: https://social.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.social_token
    resources:
    - name: metrics
      path: /campaigns/{{campaign}}
      inputParameters:
      - name: campaign
        in: path
      operations:
      - name: get-metrics
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: marketing
      path: /compile
      operations:
      - name: compile
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
Open in Framework → View in Fleet → marketing-campaign-pipeline.yml

Monitors cert expiry at Gusto.

naftiko: '0.5'
info:
  label: Certificate Expiry Pipeline
  description: Monitors cert expiry at Gusto.
  tags:
  - security
  - certificates
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: cert-monitor
    port: 8080
    tools:
    - name: check-certs
      description: Monitor certs at Gusto.
      inputParameters:
      - name: domains
        in: body
        type: string
        description: Domains to check.
      steps:
      - name: scan
        type: call
        call: cert-scanner.scan
        with:
          domains: '{{domains}}'
      - name: filter
        type: call
        call: analytics.filter-expiring
        with:
          certs: '{{scan.results}}'
      - name: ticket
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: '{{filter.count}} certs expiring'
      - name: alert
        type: call
        call: slack.post-message
        with:
          channel: '#security'
          text: 'Cert alert: {{filter.count}} expiring'
  consumes:
  - type: http
    namespace: cert-scanner
    baseUri: https://certs.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.cert_token
    resources:
    - name: scans
      path: /scan
      operations:
      - name: scan
        method: POST
  - type: http
    namespace: jira
    baseUri: https://gusto.com.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_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → certificate-expiry-pipeline.yml

Analyzes budget variance at Gusto via Oracle, Workday, and Slack.

naftiko: '0.5'
info:
  label: Budget Variance Pipeline
  description: Analyzes budget variance at Gusto via Oracle, Workday, and Slack.
  tags:
  - finance
  - budget
  - oracle
  - workday
capability:
  exposes:
  - type: mcp
    namespace: budget-var
    port: 8080
    tools:
    - name: analyze-variance
      description: Check budget variance at Gusto.
      inputParameters:
      - name: cc
        in: body
        type: string
        description: Cost center.
      - name: period
        in: body
        type: string
        description: Period.
      steps:
      - name: actuals
        type: call
        call: oracle.get-actuals
        with:
          cc: '{{cc}}'
          period: '{{period}}'
      - name: budget
        type: call
        call: workday.get-budget
        with:
          cc: '{{cc}}'
      - name: compute
        type: call
        call: analytics.variance
        with:
          a: '{{actuals.total}}'
          b: '{{budget.total}}'
      - name: alert
        type: call
        call: slack.post-message
        with:
          channel: '#finance'
          text: 'Variance {{cc}}: ${{compute.variance}}'
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://oracle.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: fin
      path: /actuals
      operations:
      - name: get-actuals
        method: GET
  - type: http
    namespace: workday
    baseUri: https://wd5.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: budgets
      path: /budgets
      operations:
      - name: get-budget
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: var
      path: /compute
      operations:
      - name: variance
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → budget-variance-pipeline.yml

Retrieves a Figma design file's metadata including last modified date, number of pages, and collaborator count for design team tracking.

naftiko: '0.5'
info:
  label: Figma Design File Status
  description: Retrieves a Figma design file's metadata including last modified date, number of pages, and collaborator count for design team tracking.
  tags:
  - design
  - figma
capability:
  exposes:
  - type: mcp
    namespace: design
    port: 8080
    tools:
    - name: get-design-file
      description: Look up a Figma file by key. Returns name, last modified, and page count.
      inputParameters:
      - name: file_key
        in: body
        type: string
        description: The Figma file key.
      call: figma.get-file
      with:
        file_key: '{{file_key}}'
  consumes:
  - type: http
    namespace: figma
    baseUri: https://api.figma.com/v1
    authentication:
      type: bearer
      token: $secrets.figma_token
    resources:
    - name: files
      path: /files/{{file_key}}
      inputParameters:
      - name: file_key
        in: path
      operations:
      - name: get-file
        method: GET
Open in Framework → View in Fleet → figma-design-file-status.yml

Retrieves GitHub repository details including last commit, open PRs, branch protection status, and CI health for Gusto engineering.

naftiko: '0.5'
info:
  label: GitHub Repository Status
  description: Retrieves GitHub repository details including last commit, open PRs, branch protection status, and CI health for Gusto engineering.
  tags:
  - engineering
  - github
capability:
  exposes:
  - type: mcp
    namespace: source-control
    port: 8080
    tools:
    - name: get-repo-status
      description: Look up a GitHub repository. Returns last commit, open PR count, and default branch.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: The repository name (owner/repo).
      call: github.get-repo
      with:
        repo: '{{repo_name}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{repo}}
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
Open in Framework → View in Fleet → github-repository-status.yml

Queries Datadog for application performance metrics including latency, error rate, and throughput for Gusto's core services.

naftiko: '0.5'
info:
  label: Datadog Application Performance
  description: Queries Datadog for application performance metrics including latency, error rate, and throughput for Gusto's core services.
  tags:
  - infrastructure
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: apm
    port: 8080
    tools:
    - name: get-service-health
      description: Retrieve service health from Datadog by service name.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog.get-service-summary
      with:
        service: '{{service_name}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      name: DD-API-KEY
      in: header
      value: $secrets.datadog_api_key
    resources:
    - name: services
      path: /service_dependencies
      operations:
      - name: get-service-summary
        method: GET
Open in Framework → View in Fleet → datadog-application-performance.yml

Checks ES index at Gusto.

naftiko: '0.5'
info:
  label: ES Index Health
  description: Checks ES index at Gusto.
  tags:
  - search
  - elasticsearch
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: es-health
    port: 8080
    tools:
    - name: check-index
      description: Check ES index at Gusto.
      inputParameters:
      - name: index
        in: body
        type: string
        description: Index name.
      call: es.get-health
      with:
        index: '{{index}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: docs
        type: number
        mapping: $.docs.count
  consumes:
  - type: http
    namespace: es
    baseUri: https://es.gusto.com:9200
    authentication:
      type: bearer
      token: $secrets.es_token
    resources:
    - name: indices
      path: /{{index}}/_stats
      inputParameters:
      - name: index
        in: path
      operations:
      - name: get-health
        method: GET
Open in Framework → View in Fleet → es-index-health.yml

Detects infrastructure drift at Gusto via Terraform, Slack, and Jira.

naftiko: '0.5'
info:
  label: Drift Detection Pipeline
  description: Detects infrastructure drift at Gusto via Terraform, Slack, and Jira.
  tags:
  - infrastructure
  - terraform
  - drift-detection
  - devops
capability:
  exposes:
  - type: mcp
    namespace: drift-det
    port: 8080
    tools:
    - name: detect
      description: Detect drift at Gusto.
      inputParameters:
      - name: ws_id
        in: body
        type: string
        description: Workspace ID.
      - name: env
        in: body
        type: string
        description: Environment.
      steps:
      - name: plan
        type: call
        call: terraform.run
        with:
          ws: '{{ws_id}}'
      - name: check
        type: call
        call: terraform.get-plan
        with:
          run: '{{plan.id}}'
      - name: alert
        type: call
        call: slack.post-message
        with:
          channel: '#infra'
          text: 'Drift {{env}}: {{check.changes}} changes'
      - name: ticket
        type: call
        call: jira.create-issue
        with:
          project: INFRA
          summary: Drift in {{env}}
  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: run
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: jira
    baseUri: https://gusto.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → drift-detection-pipeline.yml

Monitors data pipelines at Gusto via Databricks, Snowflake, Slack, and ServiceNow.

naftiko: '0.5'
info:
  label: Data Pipeline Monitor Pipeline
  description: Monitors data pipelines at Gusto via Databricks, Snowflake, Slack, and ServiceNow.
  tags:
  - data-engineering
  - databricks
  - monitoring
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pipeline-mon
    port: 8080
    tools:
    - name: monitor
      description: Monitor pipelines at Gusto.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: Pipeline ID.
      steps:
      - name: status
        type: call
        call: databricks.get-run
        with:
          id: '{{pipeline_id}}'
      - name: quality
        type: call
        call: snowflake.query
        with:
          query: SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'
      - name: alert
        type: call
        call: slack.post-message
        with:
          channel: '#data'
          text: 'Pipeline {{pipeline_id}}: {{status.state}}'
      - name: incident
        type: call
        call: servicenow.create-incident
        with:
          desc: Pipeline {{pipeline_id}} issue
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://gusto.com.cloud.databricks.com/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: jobs
      path: /jobs/runs/get
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://gusto.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → data-pipeline-monitor-pipeline.yml

Checks Google user at Gusto.

naftiko: '0.5'
info:
  label: Google Workspace User Check
  description: Checks Google user at Gusto.
  tags:
  - identity
  - google-workspace
  - directory
capability:
  exposes:
  - type: mcp
    namespace: gws
    port: 8080
    tools:
    - name: check-user
      description: Check user at Gusto.
      inputParameters:
      - name: email
        in: body
        type: string
        description: Email.
      call: google.get-user
      with:
        email: '{{email}}'
      outputParameters:
      - name: suspended
        type: boolean
        mapping: $.suspended
  consumes:
  - type: http
    namespace: google
    baseUri: https://admin.googleapis.com/admin/directory/v1
    authentication:
      type: bearer
      token: $secrets.google_admin_token
    resources:
    - name: users
      path: /users/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → google-workspace-user-check.yml

When a Zendesk ticket is escalated, retrieves customer and ticket details, creates a Salesforce case for the account team, logs the escalation in Jira, and alerts the support lead in Slack.

naftiko: '0.5'
info:
  label: Customer Support Escalation Pipeline
  description: When a Zendesk ticket is escalated, retrieves customer and ticket details, creates a Salesforce case for the account team, logs the escalation in Jira, and alerts the support lead in Slack.
  tags:
  - customer-service
  - escalation
  - zendesk
  - salesforce
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: support-escalation
    port: 8080
    tools:
    - name: escalate-ticket
      description: Given a Zendesk ticket ID, pull details, create Salesforce case, Jira issue, and notify via Slack.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      steps:
      - name: get-ticket
        type: call
        call: zendesk.get-ticket
        with:
          ticket_id: '{{ticket_id}}'
      - name: create-sf-case
        type: call
        call: salesforce.create-case
        with:
          subject: 'Escalated: {{get-ticket.subject}}'
          description: 'Zendesk ticket #{{ticket_id}}. Customer: {{get-ticket.requester_name}}. Priority: {{get-ticket.priority}}. Description: {{get-ticket.description}}'
          priority: High
      - name: create-jira-issue
        type: call
        call: jira.create-issue
        with:
          project: SUPPORT
          summary: 'Escalation: Zendesk #{{ticket_id}} — {{get-ticket.subject}}'
          description: 'Zendesk: #{{ticket_id}}. Salesforce case: {{create-sf-case.CaseNumber}}. Customer: {{get-ticket.requester_name}}.'
          issue_type: Bug
      - name: alert-lead
        type: call
        call: slack.post-message
        with:
          channel: support-escalations
          text: 'ESCALATION: Zendesk #{{ticket_id}} — {{get-ticket.subject}}. Customer: {{get-ticket.requester_name}}. SF Case: {{create-sf-case.CaseNumber}}. Jira: {{create-jira-issue.key}}.'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://gusto.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: salesforce
    baseUri: https://gusto.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: jira
    baseUri: https://gusto.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → customer-support-escalation-pipeline.yml

Checks Terraform workspace at Gusto.

naftiko: '0.5'
info:
  label: Terraform Workspace Check
  description: Checks Terraform workspace at Gusto.
  tags:
  - infrastructure
  - terraform
  - iac
capability:
  exposes:
  - type: mcp
    namespace: tf-ws
    port: 8080
    tools:
    - name: check-ws
      description: Check workspace at Gusto.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Workspace ID.
      call: terraform.get-ws
      with:
        workspace_id: '{{workspace_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.data.attributes.name
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /workspaces/{{workspace_id}}
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: get-ws
        method: GET
Open in Framework → View in Fleet → terraform-workspace-check.yml

Executes a SQL query against Gusto's Snowflake data warehouse for payroll analytics, compliance reporting, and product usage metrics.

naftiko: '0.5'
info:
  label: Snowflake Analytics Query
  description: Executes a SQL query against Gusto's Snowflake data warehouse for payroll analytics, compliance reporting, and product usage metrics.
  tags:
  - data-analytics
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data-warehouse
    port: 8080
    tools:
    - name: run-query
      description: Execute a SQL query against Snowflake.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: The SQL query.
      - name: warehouse
        in: body
        type: string
        description: The Snowflake warehouse.
      call: snowflake.execute-statement
      with:
        statement: '{{sql_statement}}'
        warehouse: '{{warehouse}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gusto.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-analytics-query.yml

Checks Datadog monitor at Gusto.

naftiko: '0.5'
info:
  label: Datadog Monitor Check
  description: Checks Datadog monitor at Gusto.
  tags:
  - monitoring
  - datadog
  - observability
capability:
  exposes:
  - type: mcp
    namespace: dd-monitor
    port: 8080
    tools:
    - name: check-monitor
      description: Check monitor at Gusto.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Monitor ID.
      call: datadog.get-monitor
      with:
        monitor_id: '{{monitor_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.overall_state
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_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-monitor-check.yml

Checks on-call at Gusto.

naftiko: '0.5'
info:
  label: PagerDuty On-Call Check
  description: Checks on-call at Gusto.
  tags:
  - incident-management
  - pagerduty
  - on-call
capability:
  exposes:
  - type: mcp
    namespace: pd-oncall
    port: 8080
    tools:
    - name: get-oncall
      description: Check on-call at Gusto.
      inputParameters:
      - name: schedule_id
        in: body
        type: string
        description: Schedule ID.
      call: pagerduty.get-oncall
      with:
        schedule_id: '{{schedule_id}}'
      outputParameters:
      - name: user
        type: string
        mapping: $.oncalls[0].user.summary
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: oncalls
      path: /oncalls
      operations:
      - name: get-oncall
        method: GET
Open in Framework → View in Fleet → pagerduty-on-call-check.yml

Coordinates a feature release by checking GitHub CI status, updating the Confluence release notes, creating a Zendesk article for customer support, and announcing in Slack.

naftiko: '0.5'
info:
  label: Product Feature Release Pipeline
  description: Coordinates a feature release by checking GitHub CI status, updating the Confluence release notes, creating a Zendesk article for customer support, and announcing in Slack.
  tags:
  - engineering
  - release
  - github
  - confluence
  - zendesk
  - slack
capability:
  exposes:
  - type: mcp
    namespace: release-mgmt
    port: 8080
    tools:
    - name: release-feature
      description: Given a feature name and version, check CI, update docs, create support article, and announce.
      inputParameters:
      - name: feature_name
        in: body
        type: string
        description: The feature name.
      - name: version
        in: body
        type: string
        description: The release version.
      - name: repo_name
        in: body
        type: string
        description: The GitHub repository (owner/repo).
      steps:
      - name: check-ci
        type: call
        call: github.get-latest-workflow
        with:
          repo: '{{repo_name}}'
      - name: update-release-notes
        type: call
        call: confluence.create-page
        with:
          space_key: ENG
          title: 'Release Notes: {{feature_name}} v{{version}}'
          body: 'Feature: {{feature_name}}. Version: {{version}}. CI status: {{check-ci.conclusion}}. Released: today.'
      - name: create-support-article
        type: call
        call: zendesk.create-article
        with:
          title: 'New Feature: {{feature_name}}'
          body: We've released {{feature_name}} (v{{version}}). Here's what's new and how to use it.
          section_id: product-updates
      - name: announce
        type: call
        call: slack.post-message
        with:
          channel: product-releases
          text: 'Released: {{feature_name}} v{{version}}. CI: {{check-ci.conclusion}}. Release notes: {{update-release-notes.url}}. Support article: {{create-support-article.url}}.'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflows
      path: /repos/{{repo}}/actions/runs?per_page=1
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: get-latest-workflow
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://gusto.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: zendesk
    baseUri: https://gusto.zendesk.com/api/v2/help_center
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: articles
      path: /sections/{{section_id}}/articles
      inputParameters:
      - name: section_id
        in: path
      operations:
      - name: create-article
        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-feature-release-pipeline.yml

Checks Redis at Gusto.

naftiko: '0.5'
info:
  label: Redis Cache Status
  description: Checks Redis at Gusto.
  tags:
  - caching
  - redis
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: redis
    port: 8080
    tools:
    - name: check-cache
      description: Check Redis at Gusto.
      inputParameters:
      - name: instance
        in: body
        type: string
        description: Instance ID.
      call: redis.get-info
      with:
        instance: '{{instance}}'
      outputParameters:
      - name: memory
        type: string
        mapping: $.used_memory_human
  consumes:
  - type: http
    namespace: redis
    baseUri: https://redis.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.redis_token
    resources:
    - name: instances
      path: /instances/{{instance}}/info
      inputParameters:
      - name: instance
        in: path
      operations:
      - name: get-info
        method: GET
Open in Framework → View in Fleet → redis-cache-status.yml

Fetches Facebook Ads campaign performance including reach, impressions, link clicks, and conversions for Gusto's SMB acquisition campaigns.

naftiko: '0.5'
info:
  label: Facebook Ads Campaign Metrics
  description: Fetches Facebook Ads campaign performance including reach, impressions, link clicks, and conversions for Gusto's SMB acquisition campaigns.
  tags:
  - marketing
  - advertising
  - facebook-ads
capability:
  exposes:
  - type: mcp
    namespace: social-ads
    port: 8080
    tools:
    - name: get-fb-campaign
      description: Retrieve Facebook Ads campaign insights by campaign ID.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Facebook Ads campaign ID.
      call: facebook-ads.get-insights
      with:
        campaign_id: '{{campaign_id}}'
  consumes:
  - type: http
    namespace: facebook-ads
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.facebook_ads_token
    resources:
    - name: insights
      path: /{{campaign_id}}/insights
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-insights
        method: GET
Open in Framework → View in Fleet → facebook-ads-campaign-metrics.yml

Checks IT incident in ServiceNow for Gusto.

naftiko: '0.5'
info:
  label: ServiceNow Incident Detail Check
  description: Checks IT incident in ServiceNow for Gusto.
  tags:
  - it-service
  - servicenow
  - incident-management
capability:
  exposes:
  - type: mcp
    namespace: snow-incident
    port: 8080
    tools:
    - name: check-incident
      description: Check incident at Gusto.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: Incident number.
      call: servicenow.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result.state
      - name: priority
        type: string
        mapping: $.result.priority
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: get-incident
        method: GET
Open in Framework → View in Fleet → servicenow-incident-detail-check.yml

Generates ESG reports at Gusto.

naftiko: '0.5'
info:
  label: ESG Report Pipeline
  description: Generates ESG reports at Gusto.
  tags:
  - sustainability
  - esg
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: esg
    port: 8080
    tools:
    - name: gen-report
      description: Generate ESG report at Gusto.
      inputParameters:
      - name: year
        in: body
        type: string
        description: Year.
      steps:
      - name: data
        type: call
        call: platform.get-environmental
        with:
          year: '{{year}}'
      - name: compute
        type: call
        call: analytics.compute-esg
        with:
          data: '{{data.metrics}}'
      - name: generate
        type: call
        call: docs.create-report
        with:
          template: esg
      - name: publish
        type: call
        call: sharepoint.upload
        with:
          path: /ESG/{{year}}/report.pdf
  consumes:
  - type: http
    namespace: platform
    baseUri: https://data.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.data_token
    resources:
    - name: environmental
      path: /metrics
      operations:
      - name: get-environmental
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: esg
      path: /compute
      operations:
      - name: compute-esg
        method: POST
  - type: http
    namespace: docs
    baseUri: https://docs.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.docs_token
    resources:
    - name: reports
      path: /create
      operations:
      - name: create-report
        method: POST
  - type: http
    namespace: sharepoint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: files
      path: /sites/root/drive/root:/{{path}}:/content
      operations:
      - name: upload
        method: PUT
Open in Framework → View in Fleet → esg-report-pipeline.yml

Checks container at Gusto.

naftiko: '0.5'
info:
  label: Docker Container Check
  description: Checks container at Gusto.
  tags:
  - containers
  - docker
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: docker
    port: 8080
    tools:
    - name: check-container
      description: Check container at Gusto.
      inputParameters:
      - name: id
        in: body
        type: string
        description: Container ID.
      call: docker.get-container
      with:
        id: '{{id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.State.Status
  consumes:
  - type: http
    namespace: docker
    baseUri: https://docker.gusto.com/v1.41
    authentication:
      type: bearer
      token: $secrets.docker_token
    resources:
    - name: containers
      path: /containers/{{id}}/json
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-container
        method: GET
Open in Framework → View in Fleet → docker-container-check.yml

Checks Azure resource at Gusto.

naftiko: '0.5'
info:
  label: Azure Resource Health
  description: Checks Azure resource at Gusto.
  tags:
  - cloud
  - azure
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: az-health
    port: 8080
    tools:
    - name: check-resource
      description: Check resource at Gusto.
      inputParameters:
      - name: resource_id
        in: body
        type: string
        description: Resource ID.
      call: azure.get-health
      with:
        id: '{{resource_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.properties.availabilityState
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: health
      path: /{{id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-health
        method: GET
Open in Framework → View in Fleet → azure-resource-health.yml

Tracks contract renewals at Gusto via contracts system, email, Jira, and Salesforce.

naftiko: '0.5'
info:
  label: Contract Renewal Pipeline
  description: Tracks contract renewals at Gusto via contracts system, email, Jira, and Salesforce.
  tags:
  - procurement
  - contracts
  - salesforce
  - jira
capability:
  exposes:
  - type: mcp
    namespace: contract-renew
    port: 8080
    tools:
    - name: track
      description: Track renewals at Gusto.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: Contract ID.
      - name: owner
        in: body
        type: string
        description: Owner email.
      steps:
      - name: get
        type: call
        call: contracts.get
        with:
          id: '{{contract_id}}'
      - name: remind
        type: call
        call: email.send
        with:
          to: '{{owner}}'
          subject: 'Renewal: {{contract_id}}'
      - name: task
        type: call
        call: jira.create-issue
        with:
          project: PROC
          summary: Renew {{contract_id}}
      - name: crm
        type: call
        call: salesforce.update
        with:
          id: '{{contract_id}}'
          stage: Renewal
  consumes:
  - type: http
    namespace: contracts
    baseUri: https://contracts.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.contracts_token
    resources:
    - name: contracts
      path: /contracts/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get
        method: GET
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
  - type: http
    namespace: jira
    baseUri: https://gusto.com.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: salesforce
    baseUri: https://gusto.com.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opps
      path: /sobjects/Opportunity
      operations:
      - name: update
        method: PATCH
Open in Framework → View in Fleet → contract-renewal-pipeline.yml

Remediates vulnerabilities at Gusto via scanning, Jira, and Slack.

naftiko: '0.5'
info:
  label: Security Vulnerability Remediation Pipeline
  description: Remediates vulnerabilities at Gusto via scanning, Jira, and Slack.
  tags:
  - security
  - vulnerability-management
  - jira
capability:
  exposes:
  - type: mcp
    namespace: vuln-fix
    port: 8080
    tools:
    - name: remediate
      description: Fix vulnerabilities at Gusto.
      inputParameters:
      - name: target
        in: body
        type: string
        description: Target.
      - name: policy
        in: body
        type: string
        description: Policy.
      steps:
      - name: scan
        type: call
        call: qualys.scan
        with:
          target: '{{target}}'
          policy: '{{policy}}'
      - name: prioritize
        type: call
        call: security.prioritize
        with:
          scan: '{{scan.id}}'
      - name: ticket
        type: call
        call: jira.create-issue
        with:
          project: SEC
          summary: 'Vulns: {{prioritize.critical}} critical'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#security'
          text: 'Scan: {{prioritize.critical}} critical'
  consumes:
  - type: http
    namespace: qualys
    baseUri: https://qualysapi.qualys.com/api/v2
    authentication:
      type: bearer
      token: $secrets.qualys_token
    resources:
    - name: scans
      path: /fo/scan
      operations:
      - name: scan
        method: POST
  - type: http
    namespace: security
    baseUri: https://security.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.security_token
    resources:
    - name: vulns
      path: /prioritize
      operations:
      - name: prioritize
        method: POST
  - type: http
    namespace: jira
    baseUri: https://gusto.com.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_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → security-vulnerability-remediation-pipeline.yml

Onboards employees at Gusto with Okta, ServiceNow, Slack, and calendar.

naftiko: '0.5'
info:
  label: New Employee IT Onboarding Pipeline
  description: Onboards employees at Gusto with Okta, ServiceNow, Slack, and calendar.
  tags:
  - hr
  - onboarding
  - okta
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: it-onboarding
    port: 8080
    tools:
    - name: onboard-employee
      description: Onboard employees at Gusto.
      inputParameters:
      - name: name
        in: body
        type: string
        description: Name.
      - name: dept
        in: body
        type: string
        description: Department.
      - name: start
        in: body
        type: string
        description: Start date.
      steps:
      - name: okta
        type: call
        call: okta.create-user
        with:
          name: '{{name}}'
          department: '{{dept}}'
      - name: equip
        type: call
        call: servicenow.create-request
        with:
          type: new_hire
          for: '{{name}}'
      - name: slack
        type: call
        call: slack.invite
        with:
          email: '{{okta.email}}'
      - name: orient
        type: call
        call: calendar.create-event
        with:
          title: Orientation - {{name}}
          date: '{{start}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://gusto.com.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.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_token
    resources:
    - name: users
      path: /users.admin.invite
      operations:
      - name: invite
        method: POST
  - type: http
    namespace: calendar
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: events
      path: /users/hr/events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → new-employee-it-onboarding-pipeline.yml

Checks Zendesk ticket at Gusto.

naftiko: '0.5'
info:
  label: Zendesk Ticket Check
  description: Checks Zendesk ticket at Gusto.
  tags:
  - support
  - zendesk
  - ticketing
capability:
  exposes:
  - type: mcp
    namespace: zd-ticket
    port: 8080
    tools:
    - name: check-ticket
      description: Check ticket at Gusto.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: Ticket ID.
      call: zendesk.get-ticket
      with:
        id: '{{ticket_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.ticket.status
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://gusto.com.zendesk.com/api/v2
    authentication:
      type: bearer
      token: $secrets.zendesk_token
    resources:
    - name: tickets
      path: /tickets/{{id}}.json
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-ticket
        method: GET
Open in Framework → View in Fleet → zendesk-ticket-check.yml

Retrieves an employee's benefits enrollment status from Salesforce, returning active plans, coverage levels, dependents, and enrollment period.

naftiko: '0.5'
info:
  label: Benefits Enrollment Status
  description: Retrieves an employee's benefits enrollment status from Salesforce, returning active plans, coverage levels, dependents, and enrollment period.
  tags:
  - benefits
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: benefits
    port: 8080
    tools:
    - name: get-enrollment-status
      description: Look up an employee's benefits enrollment. Returns active plans, coverage, and dependents.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The employee identifier.
      call: salesforce.get-enrollment
      with:
        employee_id: '{{employee_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://gusto.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: enrollments
      path: /query?q=SELECT+Id,Plan__c,CoverageLevel__c,Dependents__c,Status__c+FROM+BenefitsEnrollment__c+WHERE+EmployeeId__c='{{employee_id}}'
      inputParameters:
      - name: employee_id
        in: query
      operations:
      - name: get-enrollment
        method: GET
Open in Framework → View in Fleet → benefits-enrollment-status.yml

Verifies backups at Gusto.

naftiko: '0.5'
info:
  label: Backup Verification Pipeline
  description: Verifies backups at Gusto.
  tags:
  - database
  - backup
  - operations
capability:
  exposes:
  - type: mcp
    namespace: backup-verify
    port: 8080
    tools:
    - name: verify-backups
      description: Verify backups at Gusto.
      inputParameters:
      - name: db
        in: body
        type: string
        description: Database.
      - name: date
        in: body
        type: string
        description: Backup date.
      steps:
      - name: status
        type: call
        call: backup.get-status
        with:
          db: '{{db}}'
          date: '{{date}}'
      - name: verify
        type: call
        call: backup.verify
        with:
          id: '{{status.backup_id}}'
      - name: log
        type: call
        call: snowflake.query
        with:
          query: INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')
      - name: alert
        type: call
        call: slack.post-message
        with:
          channel: '#dba'
          text: 'Backup {{db}}: {{verify.status}}'
  consumes:
  - type: http
    namespace: backup
    baseUri: https://backup.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.backup_token
    resources:
    - name: backups
      path: /databases/{{db}}/status
      inputParameters:
      - name: db
        in: path
      operations:
      - name: get-status
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://gusto.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → backup-verification-pipeline.yml

Reallocates costs at Gusto.

naftiko: '0.5'
info:
  label: Cost Reallocation Pipeline
  description: Reallocates costs at Gusto.
  tags:
  - finance
  - cost-allocation
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: cost-realloc
    port: 8080
    tools:
    - name: reallocate
      description: Reallocate costs at Gusto.
      inputParameters:
      - name: source
        in: body
        type: string
        description: Source CC.
      - name: target
        in: body
        type: string
        description: Target CC.
      - name: amount
        in: body
        type: number
        description: Amount.
      steps:
      - name: current
        type: call
        call: oracle.get-alloc
        with:
          cc: '{{source}}'
      - name: compute
        type: call
        call: analytics.realloc
        with:
          source: '{{source}}'
          target: '{{target}}'
          amount: '{{amount}}'
      - name: post
        type: call
        call: oracle.post-journal
        with:
          entries: '{{compute.entries}}'
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#finance'
          text: Reallocated ${{amount}} from {{source}} to {{target}}
  consumes:
  - type: http
    namespace: oracle
    baseUri: https://oracle.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: allocations
      path: /cost-centers/{{cc}}/allocations
      inputParameters:
      - name: cc
        in: path
      operations:
      - name: get-alloc
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: realloc
      path: /compute
      operations:
      - name: realloc
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → cost-reallocation-pipeline.yml

Checks MuleSoft API gateway health for Gusto's integration layer, returning active API count, error rate, and throughput.

naftiko: '0.5'
info:
  label: MuleSoft Integration Health
  description: Checks MuleSoft API gateway health for Gusto's integration layer, returning active API count, error rate, and throughput.
  tags:
  - infrastructure
  - integration
  - mulesoft
capability:
  exposes:
  - type: mcp
    namespace: integration-health
    port: 8080
    tools:
    - name: get-integration-status
      description: Retrieve MuleSoft API health for an environment.
      inputParameters:
      - name: environment_id
        in: body
        type: string
        description: The MuleSoft environment ID.
      call: mulesoft.get-api-stats
      with:
        environment_id: '{{environment_id}}'
  consumes:
  - type: http
    namespace: mulesoft
    baseUri: https://anypoint.mulesoft.com/analytics/1.0
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: api-stats
      path: /{{org_id}}/environments/{{environment_id}}/apis
      inputParameters:
      - name: environment_id
        in: path
      operations:
      - name: get-api-stats
        method: GET
Open in Framework → View in Fleet → mulesoft-integration-health.yml

Retrieves a Zendesk support ticket by ID, returning subject, status, priority, assignee, and customer details.

naftiko: '0.5'
info:
  label: Zendesk Support Ticket Lookup
  description: Retrieves a Zendesk support ticket by ID, returning subject, status, priority, assignee, and customer details.
  tags:
  - customer-service
  - zendesk
capability:
  exposes:
  - type: mcp
    namespace: support
    port: 8080
    tools:
    - name: get-ticket
      description: Look up a Zendesk ticket by ID. Returns subject, status, priority, and assignee.
      inputParameters:
      - name: ticket_id
        in: body
        type: string
        description: The Zendesk ticket ID.
      call: zendesk.get-ticket
      with:
        ticket_id: '{{ticket_id}}'
  consumes:
  - type: http
    namespace: zendesk
    baseUri: https://gusto.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-support-ticket-lookup.yml

When a new hire is added, creates their payroll record in Oracle Financials, enrolls them in default benefits in Salesforce, sends a welcome email via Gmail, and notifies the HR team in Slack.

naftiko: '0.5'
info:
  label: New Employee Payroll Setup Orchestrator
  description: When a new hire is added, creates their payroll record in Oracle Financials, enrolls them in default benefits in Salesforce, sends a welcome email via Gmail, and notifies the HR team in Slack.
  tags:
  - payroll
  - onboarding
  - oracle-financials
  - salesforce
  - gmail
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payroll-onboarding
    port: 8080
    tools:
    - name: setup-new-employee-payroll
      description: Given employee details, create payroll record, enroll in benefits, send welcome email, and notify HR.
      inputParameters:
      - name: employee_name
        in: body
        type: string
        description: The new employee's full name.
      - name: employee_email
        in: body
        type: string
        description: The new employee's email.
      - name: salary
        in: body
        type: number
        description: Annual salary.
      - name: start_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: company_id
        in: body
        type: string
        description: The Gusto customer company ID.
      steps:
      - name: create-payroll
        type: call
        call: oracle-financials.create-payroll-record
        with:
          employee_name: '{{employee_name}}'
          email: '{{employee_email}}'
          salary: '{{salary}}'
          start_date: '{{start_date}}'
          company_id: '{{company_id}}'
      - name: enroll-benefits
        type: call
        call: salesforce.create-enrollment
        with:
          employee_id: '{{create-payroll.employee_id}}'
          plan_type: default
          effective_date: '{{start_date}}'
      - name: send-welcome
        type: call
        call: gmail.send-email
        with:
          to: '{{employee_email}}'
          subject: Welcome to {{company_id}} — Your Gusto Account is Ready
          body: 'Hi {{employee_name}}, your payroll has been set up. Your first payday is based on your start date {{start_date}}. Benefits enrollment: {{enroll-benefits.enrollment_id}}.'
      - name: notify-hr
        type: call
        call: slack.post-message
        with:
          channel: hr-onboarding
          text: 'New employee payroll setup: {{employee_name}} at {{company_id}}. Salary: ${{salary}}. Start: {{start_date}}. Benefits enrolled. Payroll ID: {{create-payroll.employee_id}}.'
  consumes:
  - type: http
    namespace: oracle-financials
    baseUri: https://gusto.oraclecloud.com/hcmRestApi/resources/v1
    authentication:
      type: bearer
      token: $secrets.oracle_financials_token
    resources:
    - name: payroll-records
      path: /payrollRelationships
      operations:
      - name: create-payroll-record
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://gusto.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: enrollments
      path: /sobjects/BenefitsEnrollment__c
      operations:
      - name: create-enrollment
        method: POST
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.gmail_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-employee-payroll-setup-orchestrator.yml

Sends a notification message to a Slack channel for operational alerts, release announcements, or team updates.

naftiko: '0.5'
info:
  label: Slack Channel Notification
  description: Sends a notification message to a Slack channel for operational alerts, release announcements, or team updates.
  tags:
  - communications
  - slack
capability:
  exposes:
  - type: mcp
    namespace: notifications
    port: 8080
    tools:
    - name: send-slack-message
      description: Post a message to a Slack channel.
      inputParameters:
      - name: channel
        in: body
        type: string
        description: The Slack channel name or ID.
      - name: message
        in: body
        type: string
        description: The message text.
      call: slack.post-message
      with:
        channel: '{{channel}}'
        text: '{{message}}'
  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-notification.yml

Retrieves sprint progress at Gusto.

naftiko: '0.5'
info:
  label: Jira Sprint Progress Lookup
  description: Retrieves sprint progress at Gusto.
  tags:
  - project-management
  - jira
  - agile
capability:
  exposes:
  - type: mcp
    namespace: jira-sprint
    port: 8080
    tools:
    - name: get-sprint
      description: Look up sprint at Gusto.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Project key.
      call: jira.get-sprints
      with:
        project: '{{project_key}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.values[0].name
      - name: state
        type: string
        mapping: $.values[0].state
  consumes:
  - type: http
    namespace: jira
    baseUri: https://gusto.com.atlassian.net/rest/agile/1.0
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: sprints
      path: /board/1/sprint
      operations:
      - name: get-sprints
        method: GET
Open in Framework → View in Fleet → jira-sprint-progress-lookup.yml

Checks ArgoCD sync at Gusto.

naftiko: '0.5'
info:
  label: ArgoCD Sync Status
  description: Checks ArgoCD sync at Gusto.
  tags:
  - devops
  - argocd
  - gitops
capability:
  exposes:
  - type: mcp
    namespace: argocd
    port: 8080
    tools:
    - name: check-sync
      description: Check ArgoCD at Gusto.
      inputParameters:
      - name: app
        in: body
        type: string
        description: App name.
      call: argocd.get-app
      with:
        name: '{{app}}'
      outputParameters:
      - name: sync
        type: string
        mapping: $.status.sync.status
  consumes:
  - type: http
    namespace: argocd
    baseUri: https://argocd.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.argocd_token
    resources:
    - name: apps
      path: /applications/{{name}}
      inputParameters:
      - name: name
        in: path
      operations:
      - name: get-app
        method: GET
Open in Framework → View in Fleet → argocd-sync-status.yml

Retrieves AWS cost and usage summary for Gusto's cloud infrastructure by service and time period.

naftiko: '0.5'
info:
  label: AWS Cost Summary
  description: Retrieves AWS cost and usage summary for Gusto's cloud infrastructure by service and time period.
  tags:
  - infrastructure
  - cloud
  - amazon-web-services
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost
    port: 8080
    tools:
    - name: get-aws-cost
      description: Retrieve AWS cost summary 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: aws.get-cost-and-usage
      with:
        start: '{{start_date}}'
        end: '{{end_date}}'
  consumes:
  - type: http
    namespace: aws
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_ce_token
    resources:
    - name: cost
      path: /
      operations:
      - name: get-cost-and-usage
        method: POST
Open in Framework → View in Fleet → aws-cost-summary.yml

Queries Prometheus metrics at Gusto.

naftiko: '0.5'
info:
  label: Prometheus Metrics Query
  description: Queries Prometheus metrics at Gusto.
  tags:
  - monitoring
  - prometheus
  - metrics
capability:
  exposes:
  - type: mcp
    namespace: prom
    port: 8080
    tools:
    - name: query
      description: Query Prometheus at Gusto.
      inputParameters:
      - name: query
        in: body
        type: string
        description: PromQL query.
      call: prometheus.query
      with:
        query: '{{query}}'
      outputParameters:
      - name: value
        type: number
        mapping: $.data.result[0].value[1]
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: queries
      path: /query
      operations:
      - name: query
        method: GET
Open in Framework → View in Fleet → prometheus-metrics-query.yml

When open enrollment period begins, sends notification emails via Gmail to all eligible employees, creates enrollment tracking tasks in Salesforce, updates the Confluence enrollment guide, and notifies HR in Slack.

naftiko: '0.5'
info:
  label: Open Enrollment Orchestrator
  description: When open enrollment period begins, sends notification emails via Gmail to all eligible employees, creates enrollment tracking tasks in Salesforce, updates the Confluence enrollment guide, and notifies HR in Slack.
  tags:
  - benefits
  - open-enrollment
  - gmail
  - salesforce
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: open-enrollment
    port: 8080
    tools:
    - name: launch-open-enrollment
      description: Given a company ID and enrollment window dates, send notifications, create tasks, update docs, and alert HR.
      inputParameters:
      - name: company_id
        in: body
        type: string
        description: The Gusto customer company ID.
      - name: enrollment_start
        in: body
        type: string
        description: Enrollment start date in YYYY-MM-DD format.
      - name: enrollment_end
        in: body
        type: string
        description: Enrollment end date in YYYY-MM-DD format.
      steps:
      - name: send-notifications
        type: call
        call: gmail.send-email
        with:
          to: all-employees@{{company_id}}.gusto.com
          subject: Open Enrollment Now Open — Action Required by {{enrollment_end}}
          body: Open enrollment for your benefits is now available from {{enrollment_start}} to {{enrollment_end}}. Log in to Gusto to review and update your elections.
      - name: create-tracking
        type: call
        call: salesforce.create-campaign
        with:
          name: Open Enrollment {{company_id}} — {{enrollment_start}}
          type: Benefits Enrollment
          start_date: '{{enrollment_start}}'
          end_date: '{{enrollment_end}}'
      - name: update-guide
        type: call
        call: confluence.update-page
        with:
          page_id: open-enrollment-guide
          body: 'Open enrollment window: {{enrollment_start}} to {{enrollment_end}}. Company: {{company_id}}.'
      - name: notify-hr
        type: call
        call: slack.post-message
        with:
          channel: hr-benefits
          text: 'Open enrollment launched for {{company_id}}: {{enrollment_start}} to {{enrollment_end}}. Notifications sent. Salesforce campaign: {{create-tracking.id}}.'
  consumes:
  - type: http
    namespace: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.gmail_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://gusto.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: confluence
    baseUri: https://gusto.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: update-page
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → open-enrollment-orchestrator.yml

Checks Lambda at Gusto.

naftiko: '0.5'
info:
  label: Lambda Function Check
  description: Checks Lambda at Gusto.
  tags:
  - serverless
  - aws
  - lambda
capability:
  exposes:
  - type: mcp
    namespace: lambda
    port: 8080
    tools:
    - name: check-fn
      description: Check Lambda at Gusto.
      inputParameters:
      - name: fn
        in: body
        type: string
        description: Function name.
      call: lambda.get-fn
      with:
        name: '{{fn}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.Configuration.State
  consumes:
  - type: http
    namespace: lambda
    baseUri: https://lambda.us-east-1.amazonaws.com/2015-03-31
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: functions
      path: /functions/{{name}}
      inputParameters:
      - name: name
        in: path
      operations:
      - name: get-fn
        method: GET
Open in Framework → View in Fleet → lambda-function-check.yml

Escalates IT incidents at Gusto via ServiceNow, PagerDuty, and Slack.

naftiko: '0.5'
info:
  label: IT Incident Escalation Pipeline
  description: Escalates IT incidents at Gusto via ServiceNow, PagerDuty, and Slack.
  tags:
  - incident-management
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: incident-escalation
    port: 8080
    tools:
    - name: escalate-incident
      description: Escalate incidents at Gusto.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: Incident ID.
      - name: severity
        in: body
        type: string
        description: Severity.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: page
        type: call
        call: pagerduty.create-incident
        with:
          title: '{{get-incident.description}}'
          urgency: '{{severity}}'
      - name: channel
        type: call
        call: slack.create-channel
        with:
          name: inc-{{incident_id}}
      - name: notify
        type: call
        call: slack.post-message
        with:
          channel: '#inc-{{incident_id}}'
          text: 'P{{severity}}: {{get-incident.description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - 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_token
    resources:
    - name: channels
      path: /conversations.create
      operations:
      - name: create-channel
        method: POST
Open in Framework → View in Fleet → it-incident-escalation-pipeline.yml

Checks Vault secret at Gusto.

naftiko: '0.5'
info:
  label: Vault Secret Metadata
  description: Checks Vault secret at Gusto.
  tags:
  - security
  - vault
  - secrets-management
capability:
  exposes:
  - type: mcp
    namespace: vault
    port: 8080
    tools:
    - name: check-secret
      description: Check secret at Gusto.
      inputParameters:
      - name: path
        in: body
        type: string
        description: Secret path.
      call: vault.get-metadata
      with:
        path: '{{path}}'
      outputParameters:
      - name: version
        type: number
        mapping: $.data.current_version
  consumes:
  - type: http
    namespace: vault
    baseUri: https://vault.gusto.com/v1
    authentication:
      type: bearer
      token: $secrets.vault_token
    resources:
    - name: secrets
      path: /secret/metadata/{{path}}
      inputParameters:
      - name: path
        in: path
      operations:
      - name: get-metadata
        method: GET
Open in Framework → View in Fleet → vault-secret-metadata.yml

Generates compliance reports at Gusto from Snowflake, Power BI, and email.

naftiko: '0.5'
info:
  label: Quarterly Compliance Report Pipeline
  description: Generates compliance reports at Gusto from Snowflake, Power BI, and email.
  tags:
  - compliance
  - reporting
  - snowflake
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: compliance-rpt
    port: 8080
    tools:
    - name: gen-report
      description: Generate compliance reports at Gusto.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter.
      - name: type
        in: body
        type: string
        description: Type.
      steps:
      - name: data
        type: call
        call: snowflake.query
        with:
          query: SELECT * FROM compliance WHERE q='{{quarter}}'
      - name: metrics
        type: call
        call: analytics.compute
        with:
          data: '{{data.results}}'
      - name: refresh
        type: call
        call: power-bi.refresh
        with:
          dataset: compliance
      - name: send
        type: call
        call: email.send
        with:
          to: compliance@co.com
          subject: '{{type}} - {{quarter}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gusto.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query
        method: POST
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: metrics
      path: /compute
      operations:
      - name: compute
        method: POST
  - type: http
    namespace: power-bi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.power_bi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset}}/refreshes
      inputParameters:
      - name: dataset
        in: path
      operations:
      - name: refresh
        method: POST
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → quarterly-compliance-report-pipeline.yml

Checks CloudWatch alarm at Gusto.

naftiko: '0.5'
info:
  label: CloudWatch Alarm Check
  description: Checks CloudWatch alarm at Gusto.
  tags:
  - monitoring
  - aws
  - cloudwatch
capability:
  exposes:
  - type: mcp
    namespace: cw-alarm
    port: 8080
    tools:
    - name: check-alarm
      description: Check alarm at Gusto.
      inputParameters:
      - name: alarm
        in: body
        type: string
        description: Alarm name.
      call: cw.describe-alarm
      with:
        alarm: '{{alarm}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.MetricAlarms[0].StateValue
  consumes:
  - type: http
    namespace: cw
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_token
    resources:
    - name: alarms
      path: /
      operations:
      - name: describe-alarm
        method: GET
Open in Framework → View in Fleet → cloudwatch-alarm-check.yml

Tests disaster recovery at Gusto via failover, health checks, and reporting.

naftiko: '0.5'
info:
  label: DR Test Pipeline
  description: Tests disaster recovery at Gusto via failover, health checks, and reporting.
  tags:
  - disaster-recovery
  - business-continuity
  - testing
capability:
  exposes:
  - type: mcp
    namespace: dr-test
    port: 8080
    tools:
    - name: test-dr
      description: Test DR at Gusto.
      inputParameters:
      - name: plan_id
        in: body
        type: string
        description: Plan ID.
      - name: type
        in: body
        type: string
        description: Test type.
      steps:
      - name: failover
        type: call
        call: dr.failover
        with:
          plan: '{{plan_id}}'
          type: '{{type}}'
      - name: validate
        type: call
        call: monitoring.check
        with:
          scope: critical
      - name: measure
        type: call
        call: dr.metrics
        with:
          id: '{{failover.id}}'
      - name: report
        type: call
        call: confluence.create-page
        with:
          title: DR - {{plan_id}}
          body: RTO:{{measure.rto}}m RPO:{{measure.rpo}}m
  consumes:
  - type: http
    namespace: dr
    baseUri: https://dr.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.dr_token
    resources:
    - name: failovers
      path: /failovers
      operations:
      - name: failover
        method: POST
  - type: http
    namespace: monitoring
    baseUri: https://monitoring.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.monitoring_token
    resources:
    - name: health
      path: /checks
      operations:
      - name: check
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://gusto.com.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → dr-test-pipeline.yml

Aggregates weekly payroll processing metrics from Snowflake, creates a summary in Google Sheets, refreshes the Looker dashboard, and posts results to Slack.

naftiko: '0.5'
info:
  label: Weekly Payroll Processing Report
  description: Aggregates weekly payroll processing metrics from Snowflake, creates a summary in Google Sheets, refreshes the Looker dashboard, and posts results to Slack.
  tags:
  - payroll
  - reporting
  - snowflake
  - google-sheets
  - looker
  - slack
capability:
  exposes:
  - type: mcp
    namespace: payroll-reporting
    port: 8080
    tools:
    - name: generate-weekly-payroll-report
      description: Given a week ending date, aggregate metrics, create spreadsheet, refresh dashboard, and notify.
      inputParameters:
      - name: week_ending
        in: body
        type: string
        description: Week ending date in YYYY-MM-DD format.
      steps:
      - name: get-metrics
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT COUNT(DISTINCT company_id) as companies, COUNT(DISTINCT employee_id) as employees, SUM(gross_pay) as total_gross FROM payroll_runs WHERE week_ending='{{week_ending}}'
          warehouse: PAYROLL_WH
      - name: create-report
        type: call
        call: google-sheets.create-spreadsheet
        with:
          title: Payroll Report — W/E {{week_ending}}
          data: '{{get-metrics.results}}'
      - name: refresh-dashboard
        type: call
        call: looker.run-look
        with:
          look_id: weekly-payroll-summary
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: payroll-ops
          text: 'Weekly Payroll Report (w/e {{week_ending}}): {{get-metrics.companies}} companies, {{get-metrics.employees}} employees, ${{get-metrics.total_gross}} gross pay processed. Report: {{create-report.url}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://gusto.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: 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: looker
    baseUri: https://gusto.cloud.looker.com/api/4.0
    authentication:
      type: bearer
      token: $secrets.looker_token
    resources:
    - name: looks
      path: /looks/{{look_id}}/run/json
      inputParameters:
      - name: look_id
        in: path
      operations:
      - name: run-look
        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 → weekly-payroll-processing-report.yml

When a new payroll regulation is published, documents the change in Confluence, creates an implementation task in Jira, sends an advisory to affected customers via Gmail, and notifies the compliance team in Slack.

naftiko: '0.5'
info:
  label: Compliance Regulatory Update Pipeline
  description: When a new payroll regulation is published, documents the change in Confluence, creates an implementation task in Jira, sends an advisory to affected customers via Gmail, and notifies the compliance team in Slack.
  tags:
  - compliance
  - regulatory
  - confluence
  - jira
  - gmail
  - slack
capability:
  exposes:
  - type: mcp
    namespace: regulatory-updates
    port: 8080
    tools:
    - name: process-regulatory-update
      description: Given regulatory change details, document in Confluence, create Jira task, notify customers, and alert compliance.
      inputParameters:
      - name: regulation_title
        in: body
        type: string
        description: Title of the regulatory change.
      - name: affected_states
        in: body
        type: string
        description: Comma-separated list of affected states.
      - name: effective_date
        in: body
        type: string
        description: Effective date of the change.
      - name: summary
        in: body
        type: string
        description: Summary of the regulatory change.
      steps:
      - name: document-change
        type: call
        call: confluence.create-page
        with:
          space_key: COMPLY
          title: 'Regulatory Update: {{regulation_title}}'
          body: 'Title: {{regulation_title}}. States: {{affected_states}}. Effective: {{effective_date}}. Summary: {{summary}}.'
      - name: create-implementation-task
        type: call
        call: jira.create-issue
        with:
          project: COMPLY
          summary: 'Implement: {{regulation_title}}'
          description: 'Regulatory change: {{regulation_title}}. Affected states: {{affected_states}}. Effective date: {{effective_date}}. Confluence: {{document-change.url}}.'
          issue_type: Task
          due_date: '{{effective_date}}'
      - name: notify-customers
        type: call
        call: gmail.send-email
        with:
          to: compliance-advisories@gusto.com
          subject: 'Payroll Compliance Update: {{regulation_title}}'
          body: A new regulatory change affecting {{affected_states}} takes effect {{effective_date}}. {{summary}}. No action needed — Gusto will update your payroll automatically.
      - name: alert-compliance
        type: call
        call: slack.post-message
        with:
          channel: compliance-team
          text: 'New regulation: {{regulation_title}}. States: {{affected_states}}. Effective: {{effective_date}}. Jira: {{create-implementation-task.key}}. Docs: {{document-change.url}}.'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://gusto.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: jira
    baseUri: https://gusto.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: gmail
    baseUri: https://gmail.googleapis.com/gmail/v1
    authentication:
      type: bearer
      token: $secrets.gmail_token
    resources:
    - name: messages
      path: /users/me/messages/send
      operations:
      - name: send-email
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → compliance-regulatory-update-pipeline.yml

Checks MongoDB at Gusto.

naftiko: '0.5'
info:
  label: MongoDB Stats Check
  description: Checks MongoDB at Gusto.
  tags:
  - database
  - mongodb
  - operations
capability:
  exposes:
  - type: mcp
    namespace: mongo
    port: 8080
    tools:
    - name: get-stats
      description: Check MongoDB at Gusto.
      inputParameters:
      - name: db
        in: body
        type: string
        description: Database.
      - name: collection
        in: body
        type: string
        description: Collection.
      call: mongo.get-stats
      with:
        db: '{{db}}'
        collection: '{{collection}}'
      outputParameters:
      - name: count
        type: number
        mapping: $.count
  consumes:
  - type: http
    namespace: mongo
    baseUri: https://mongo.gusto.com/api/atlas/v1.0
    authentication:
      type: bearer
      token: $secrets.mongo_token
    resources:
    - name: collections
      path: /collStats
      operations:
      - name: get-stats
        method: GET
Open in Framework → View in Fleet → mongodb-stats-check.yml

Checks Grafana dashboard at Gusto.

naftiko: '0.5'
info:
  label: Grafana Dashboard Status
  description: Checks Grafana dashboard at Gusto.
  tags:
  - monitoring
  - grafana
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: grafana
    port: 8080
    tools:
    - name: check-dash
      description: Check dashboard at Gusto.
      inputParameters:
      - name: uid
        in: body
        type: string
        description: Dashboard UID.
      call: grafana.get-dash
      with:
        uid: '{{uid}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.dashboard.title
  consumes:
  - type: http
    namespace: grafana
    baseUri: https://grafana.gusto.com/api
    authentication:
      type: bearer
      token: $secrets.grafana_token
    resources:
    - name: dashboards
      path: /dashboards/uid/{{uid}}
      inputParameters:
      - name: uid
        in: path
      operations:
      - name: get-dash
        method: GET
Open in Framework → View in Fleet → grafana-dashboard-status.yml

Generates monthly security reports at Gusto from Splunk and Qualys.

naftiko: '0.5'
info:
  label: Monthly Security Report Pipeline
  description: Generates monthly security reports at Gusto from Splunk and Qualys.
  tags:
  - security
  - reporting
  - splunk
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: sec-report
    port: 8080
    tools:
    - name: gen-sec-report
      description: Generate security report at Gusto.
      inputParameters:
      - name: month
        in: body
        type: string
        description: Month.
      steps:
      - name: splunk
        type: call
        call: splunk.search
        with:
          query: index=security earliest=-30d
      - name: scans
        type: call
        call: qualys.results
        with:
          month: '{{month}}'
      - name: compile
        type: call
        call: analytics.compile-security
        with:
          events: '{{splunk.count}}'
          vulns: '{{scans.critical}}'
      - name: send
        type: call
        call: email.send
        with:
          to: ciso@co.com
          subject: Security - {{month}}
  consumes:
  - type: http
    namespace: splunk
    baseUri: https://splunk.gusto.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search
      path: /search/jobs
      operations:
      - name: search
        method: POST
  - type: http
    namespace: qualys
    baseUri: https://qualysapi.qualys.com/api/v2
    authentication:
      type: bearer
      token: $secrets.qualys_token
    resources:
    - name: results
      path: /fo/scan/results
      operations:
      - name: results
        method: GET
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: security
      path: /compile
      operations:
      - name: compile-security
        method: POST
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: messages
      path: /send
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → monthly-security-report-pipeline.yml

Retrieves Teams activity at Gusto.

naftiko: '0.5'
info:
  label: Teams Channel Activity
  description: Retrieves Teams activity at Gusto.
  tags:
  - communications
  - microsoft-teams
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: teams-activity
    port: 8080
    tools:
    - name: get-activity
      description: Check Teams activity at Gusto.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Team ID.
      - name: channel_id
        in: body
        type: string
        description: Channel ID.
      call: teams.get-messages
      with:
        team_id: '{{team_id}}'
        channel_id: '{{channel_id}}'
      outputParameters:
      - name: count
        type: number
        mapping: $.value.length
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.microsoft_graph_token
    resources:
    - name: messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: get-messages
        method: GET
Open in Framework → View in Fleet → teams-channel-activity.yml

Manages API deprecation at Gusto via consumer identification, notices, and tracking.

naftiko: '0.5'
info:
  label: API Deprecation Pipeline
  description: Manages API deprecation at Gusto via consumer identification, notices, and tracking.
  tags:
  - api-management
  - communications
  - governance
capability:
  exposes:
  - type: mcp
    namespace: api-sunset
    port: 8080
    tools:
    - name: notify-sunset
      description: Manage API sunset at Gusto.
      inputParameters:
      - name: api
        in: body
        type: string
        description: API name.
      - name: date
        in: body
        type: string
        description: Sunset date.
      steps:
      - name: consumers
        type: call
        call: api-gw.consumers
        with:
          api: '{{api}}'
      - name: notify
        type: call
        call: email.batch
        with:
          to: '{{consumers.emails}}'
          subject: '{{api}} sunset: {{date}}'
      - name: track
        type: call
        call: analytics.usage
        with:
          api: '{{api}}'
      - name: ticket
        type: call
        call: jira.create-issue
        with:
          project: API
          summary: Sunset {{api}} by {{date}}
  consumes:
  - type: http
    namespace: api-gw
    baseUri: https://api-gw.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.api_gw_token
    resources:
    - name: consumers
      path: /apis/{{api}}/consumers
      inputParameters:
      - name: api
        in: path
      operations:
      - name: consumers
        method: GET
  - type: http
    namespace: email
    baseUri: https://email.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.email_token
    resources:
    - name: batch
      path: /send-batch
      operations:
      - name: batch
        method: POST
  - type: http
    namespace: analytics
    baseUri: https://analytics.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.analytics_token
    resources:
    - name: usage
      path: /api-usage
      operations:
      - name: usage
        method: GET
  - type: http
    namespace: jira
    baseUri: https://gusto.com.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → api-deprecation-pipeline.yml

Checks build at Gusto.

naftiko: '0.5'
info:
  label: Azure DevOps Build Check
  description: Checks build at Gusto.
  tags:
  - devops
  - azure-devops
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: azdo-build
    port: 8080
    tools:
    - name: check-build
      description: Check build at Gusto.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Project.
      - name: build_id
        in: body
        type: string
        description: Build ID.
      call: azdo.get-build
      with:
        project: '{{project}}'
        build_id: '{{build_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/gusto.com
    authentication:
      type: bearer
      token: $secrets.azdo_token
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds/{{build_id}}
      inputParameters:
      - name: project
        in: path
      - name: build_id
        in: path
      operations:
      - name: get-build
        method: GET
Open in Framework → View in Fleet → azure-devops-build-check.yml

Manages data retention at Gusto.

naftiko: '0.5'
info:
  label: Data Retention Pipeline
  description: Manages data retention at Gusto.
  tags:
  - data-governance
  - compliance
  - retention
capability:
  exposes:
  - type: mcp
    namespace: retention
    port: 8080
    tools:
    - name: cleanup
      description: Manage retention at Gusto.
      inputParameters:
      - name: policy
        in: body
        type: string
        description: Policy ID.
      steps:
      - name: find
        type: call
        call: catalog.find-expired
        with:
          policy: '{{policy}}'
      - name: archive
        type: call
        call: storage.archive
        with:
          records: '{{find.ids}}'
      - name: delete
        type: call
        call: db.delete
        with:
          ids: '{{find.ids}}'
      - name: log
        type: call
        call: snowflake.query
        with:
          query: INSERT INTO retention_log VALUES ('{{policy}}',{{find.count}})
  consumes:
  - type: http
    namespace: catalog
    baseUri: https://catalog.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.catalog_token
    resources:
    - name: policies
      path: /expired
      operations:
      - name: find-expired
        method: GET
  - type: http
    namespace: storage
    baseUri: https://storage.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.storage_token
    resources:
    - name: archives
      path: /archive
      operations:
      - name: archive
        method: POST
  - type: http
    namespace: db
    baseUri: https://db.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.db_token
    resources:
    - name: records
      path: /delete
      operations:
      - name: delete
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://gusto.com.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: query
        method: POST
Open in Framework → View in Fleet → data-retention-pipeline.yml

Retrieves a Notion page by ID for product specifications, design docs, or RFC documents used by Gusto product and engineering teams.

naftiko: '0.5'
info:
  label: Notion Product Spec Lookup
  description: Retrieves a Notion page by ID for product specifications, design docs, or RFC documents used by Gusto product and engineering teams.
  tags:
  - product-management
  - documentation
  - notion
capability:
  exposes:
  - type: mcp
    namespace: product-docs
    port: 8080
    tools:
    - name: get-page
      description: Retrieve a Notion page by ID. Returns title, content blocks, and last edited info.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Notion page ID.
      call: notion.get-page
      with:
        page_id: '{{page_id}}'
  consumes:
  - type: http
    namespace: notion
    baseUri: https://api.notion.com/v1
    authentication:
      type: bearer
      token: $secrets.notion_token
    resources:
    - name: pages
      path: /pages/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → notion-product-spec-lookup.yml

Executes a SQL query against Gusto's Amazon Redshift cluster for historical payroll analytics and large-scale data processing.

naftiko: '0.5'
info:
  label: Amazon Redshift Analytics Query
  description: Executes a SQL query against Gusto's Amazon Redshift cluster for historical payroll analytics and large-scale data processing.
  tags:
  - data-analytics
  - amazon-redshift
capability:
  exposes:
  - type: mcp
    namespace: redshift-analytics
    port: 8080
    tools:
    - name: run-redshift-query
      description: Execute a SQL query against Amazon Redshift.
      inputParameters:
      - name: sql_statement
        in: body
        type: string
        description: The SQL query.
      - name: database
        in: body
        type: string
        description: The Redshift database name.
      call: redshift.execute-statement
      with:
        sql: '{{sql_statement}}'
        database: '{{database}}'
  consumes:
  - type: http
    namespace: redshift
    baseUri: https://redshift-data.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_redshift_token
    resources:
    - name: statements
      path: /
      operations:
      - name: execute-statement
        method: POST
Open in Framework → View in Fleet → amazon-redshift-analytics-query.yml

Checks Dynatrace host at Gusto.

naftiko: '0.5'
info:
  label: Dynatrace Host Status
  description: Checks Dynatrace host at Gusto.
  tags:
  - monitoring
  - dynatrace
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: dt
    port: 8080
    tools:
    - name: check-host
      description: Check host at Gusto.
      inputParameters:
      - name: host_id
        in: body
        type: string
        description: Host ID.
      call: dt.get-host
      with:
        id: '{{host_id}}'
      outputParameters:
      - name: availability
        type: string
        mapping: $.availabilityState
  consumes:
  - type: http
    namespace: dt
    baseUri: https://gusto.com.live.dynatrace.com/api/v2
    authentication:
      type: bearer
      token: $secrets.dynatrace_token
    resources:
    - name: entities
      path: /entities/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-host
        method: GET
Open in Framework → View in Fleet → dynatrace-host-status.yml

Pulls daily web traffic metrics from Google Analytics for gusto.com including sessions, signup conversion rate, and top landing pages.

naftiko: '0.5'
info:
  label: Google Analytics Web Traffic
  description: Pulls daily web traffic metrics from Google Analytics for gusto.com including sessions, signup conversion rate, and top landing pages.
  tags:
  - marketing
  - analytics
  - google-analytics
capability:
  exposes:
  - type: mcp
    namespace: web-analytics
    port: 8080
    tools:
    - name: get-web-traffic
      description: Retrieve daily 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: google-analytics.run-report
      with:
        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.google_analytics_token
    resources:
    - name: reports
      path: /properties/{{property_id}}:runReport
      inputParameters:
      - name: property_id
        in: path
      operations:
      - name: run-report
        method: POST
Open in Framework → View in Fleet → google-analytics-web-traffic.yml

Offboards employees at Gusto via Okta, Slack, ServiceNow, and storage.

naftiko: '0.5'
info:
  label: Employee Offboarding Pipeline
  description: Offboards employees at Gusto via Okta, Slack, ServiceNow, and storage.
  tags:
  - hr
  - offboarding
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: offboarding
    port: 8080
    tools:
    - name: offboard
      description: Offboard employees at Gusto.
      inputParameters:
      - name: emp_id
        in: body
        type: string
        description: Employee ID.
      - name: last_day
        in: body
        type: string
        description: Last day.
      steps:
      - name: disable
        type: call
        call: okta.deactivate
        with:
          user: '{{emp_id}}'
      - name: revoke
        type: call
        call: slack.remove
        with:
          user: '{{emp_id}}'
      - name: return
        type: call
        call: servicenow.create-request
        with:
          type: return
          emp: '{{emp_id}}'
      - name: archive
        type: call
        call: storage.archive
        with:
          user: '{{emp_id}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://gusto.com.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{user}}/lifecycle/deactivate
      inputParameters:
      - name: user
        in: path
      operations:
      - name: deactivate
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: users
      path: /users.admin.remove
      operations:
      - name: remove
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://gusto.com.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: storage
    baseUri: https://storage.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.storage_token
    resources:
    - name: archives
      path: /archive
      operations:
      - name: archive
        method: POST
Open in Framework → View in Fleet → employee-offboarding-pipeline.yml

Processes invoices at Gusto via OCR, SAP matching, approval, and Oracle recording.

naftiko: '0.5'
info:
  label: Vendor Invoice Processing Pipeline
  description: Processes invoices at Gusto via OCR, SAP matching, approval, and Oracle recording.
  tags:
  - finance
  - accounts-payable
  - sap
  - oracle
capability:
  exposes:
  - type: mcp
    namespace: invoice-proc
    port: 8080
    tools:
    - name: process-invoice
      description: Process invoices at Gusto.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: Invoice ID.
      - name: vendor_id
        in: body
        type: string
        description: Vendor ID.
      steps:
      - name: extract
        type: call
        call: ocr.extract
        with:
          doc: '{{invoice_id}}'
      - name: match
        type: call
        call: sap.match-po
        with:
          vendor: '{{vendor_id}}'
          amount: '{{extract.total}}'
      - name: approve
        type: call
        call: workflow.submit
        with:
          invoice: '{{invoice_id}}'
      - name: record
        type: call
        call: oracle.create-payment
        with:
          invoice: '{{invoice_id}}'
  consumes:
  - type: http
    namespace: ocr
    baseUri: https://ocr.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.ocr_token
    resources:
    - name: invoices
      path: /extract
      operations:
      - name: extract
        method: POST
  - type: http
    namespace: sap
    baseUri: https://sap.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.sap_token
    resources:
    - name: pos
      path: /match
      operations:
      - name: match-po
        method: POST
  - type: http
    namespace: workflow
    baseUri: https://workflow.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.workflow_token
    resources:
    - name: approvals
      path: /submit
      operations:
      - name: submit
        method: POST
  - type: http
    namespace: oracle
    baseUri: https://oracle.gusto.com/api/v1
    authentication:
      type: bearer
      token: $secrets.oracle_token
    resources:
    - name: payments
      path: /payments
      operations:
      - name: create-payment
        method: POST
Open in Framework → View in Fleet → vendor-invoice-processing-pipeline.yml

Scans AWS S3 buckets for public access configuration and creates ServiceNow compliance tasks for any misconfigured buckets.

naftiko: '0.5'
info:
  label: AWS S3 Compliance Scan to ServiceNow
  description: Scans AWS S3 buckets for public access configuration and creates ServiceNow compliance tasks for any misconfigured buckets.
  tags:
  - security
  - compliance
  - aws
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cloud-compliance
    port: 8080
    tools:
    - name: scan-s3-compliance
      description: Given an AWS account, check S3 buckets for public access and create compliance tasks for violations.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: AWS account ID.
      steps:
      - name: list-buckets
        type: call
        call: aws-s3.list-buckets
        with:
          account_id: '{{account_id}}'
      - name: create-compliance-task
        type: call
        call: servicenow-comp.create-task
        with:
          short_description: 'S3 compliance: {{list-buckets.public_bucket_count}} public buckets in account {{account_id}}'
          assignment_group: Cloud_Security
          priority: '1'
      - name: notify-security
        type: call
        call: slack.post-message
        with:
          channel: '#cloud-security'
          text: 'S3 compliance scan: {{list-buckets.public_bucket_count}} public buckets found in account {{account_id}} — ServiceNow: {{create-compliance-task.number}}'
  consumes:
  - type: http
    namespace: aws-s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sigv4_token
      placement: header
    resources:
    - name: buckets
      path: /
      operations:
      - name: list-buckets
        method: GET
  - type: http
    namespace: servicenow-comp
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → aws-s3-compliance-scan-to-servicenow.yml

When SolarWinds detects a network node as down, automatically opens a P1 ServiceNow network incident and creates a Datadog event for cross-platform correlation.

naftiko: '0.5'
info:
  label: SolarWinds Network Node Down Alert to ServiceNow
  description: When SolarWinds detects a network node as down, automatically opens a P1 ServiceNow network incident and creates a Datadog event for cross-platform correlation.
  tags:
  - itsm
  - observability
  - solarwinds
  - servicenow
  - datadog
  - network
capability:
  exposes:
  - type: mcp
    namespace: network-ops
    port: 8080
    tools:
    - name: handle-node-down
      description: Given a SolarWinds node ID and node name, verify the node status, open a P1 ServiceNow network incident, and post a Datadog alert event for unified NOC visibility.
      inputParameters:
      - name: node_id
        in: body
        type: string
        description: SolarWinds node ID.
      - name: node_name
        in: body
        type: string
        description: Display name of the affected network node.
      steps:
      - name: get-node-status
        type: call
        call: solarwinds-query.get-node
        with:
          node_id: '{{node_id}}'
      - name: open-network-incident
        type: call
        call: servicenow-net.create-incident
        with:
          short_description: 'Network node down: {{node_name}}'
          category: network
          urgency: '1'
          impact: '1'
          description: 'Node: {{node_name}} | Status: {{get-node-status.status}} | IP: {{get-node-status.ip_address}}'
      - name: post-dd-alert
        type: call
        call: datadog-net.post-event
        with:
          title: 'Node Down: {{node_name}}'
          text: 'SolarWinds node {{node_id}} is DOWN — Incident: {{open-network-incident.number}}'
          alert_type: error
  consumes:
  - type: http
    namespace: solarwinds-query
    baseUri: https://ibm-solarwinds.internal:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query
      operations:
      - name: get-node
        method: POST
  - type: http
    namespace: servicenow-net
    baseUri: https://ibm.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: datadog-net
    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: post-event
        method: POST
Open in Framework → View in Fleet → solarwinds-network-node-down-alert-to-servicenow.yml

When an Azure DevOps pipeline fails, retrieves the failure details and creates a Jira bug ticket with the error logs.

naftiko: '0.5'
info:
  label: Azure DevOps Pipeline Failure to Jira
  description: When an Azure DevOps pipeline fails, retrieves the failure details and creates a Jira bug ticket with the error logs.
  tags:
  - devops
  - ci-cd
  - azure-devops
  - jira
capability:
  exposes:
  - type: mcp
    namespace: ci-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given an Azure DevOps build ID and project, get the failure details and create a Jira bug.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Azure DevOps project name.
      - name: build_id
        in: body
        type: string
        description: Failed build ID.
      steps:
      - name: get-build
        type: call
        call: azdo.get-build
        with:
          project: '{{project}}'
          build_id: '{{build_id}}'
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project: ENG
          issuetype: Bug
          summary: 'Pipeline failure: {{get-build.definition.name}} build #{{build_id}}'
          description: 'Build status: {{get-build.result}} | Reason: {{get-build.failureReason}}'
  consumes:
  - type: http
    namespace: azdo
    baseUri: https://dev.azure.com/ibm
    authentication:
      type: basic
      username: $secrets.azdo_user
      password: $secrets.azdo_pat
    resources:
    - name: builds
      path: /{{project}}/_apis/build/builds/{{build_id}}
      inputParameters:
      - name: project
        in: path
      - name: build_id
        in: path
      operations:
      - name: get-build
        method: GET
  - type: http
    namespace: jira
    baseUri: https://ibm-jira.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 → azure-devops-pipeline-failure-to-jira.yml

Queries Veritas NetBackup for backup job status on a given policy and creates a ServiceNow incident if any jobs have failed in the last 24 hours.

naftiko: '0.5'
info:
  label: Veritas NetBackup Job Status Check
  description: Queries Veritas NetBackup for backup job status on a given policy and creates a ServiceNow incident if any jobs have failed in the last 24 hours.
  tags:
  - itsm
  - backup
  - veritas
  - servicenow
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: backup-ops
    port: 8080
    tools:
    - name: check-backup-status
      description: Given a Veritas NetBackup policy name, retrieve recent job results and open a ServiceNow incident for any failed backup jobs.
      inputParameters:
      - name: policy_name
        in: body
        type: string
        description: Veritas NetBackup policy name to check.
      steps:
      - name: get-jobs
        type: call
        call: netbackup.get-jobs
        with:
          policy: '{{policy_name}}'
      - name: create-backup-incident
        type: call
        call: servicenow-backup.create-incident
        with:
          short_description: 'Backup failure: policy {{policy_name}}'
          category: backup
          urgency: '2'
          description: 'Failed jobs: {{get-jobs.failed_count}} | Policy: {{policy_name}}'
  consumes:
  - type: http
    namespace: netbackup
    baseUri: https://ibm-nbmaster.internal/netbackup/jobs
    authentication:
      type: bearer
      token: $secrets.netbackup_token
    resources:
    - name: jobs
      path: /jobs
      inputParameters:
      - name: policy
        in: query
      operations:
      - name: get-jobs
        method: GET
  - type: http
    namespace: servicenow-backup
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → veritas-netbackup-job-status-check.yml

Fetches IBM campaign performance metrics from Adobe Analytics and posts a weekly summary report to Salesforce as an activity log on the relevant campaign record.

naftiko: '0.5'
info:
  label: Adobe Analytics Campaign Performance Digest
  description: Fetches IBM campaign performance metrics from Adobe Analytics and posts a weekly summary report to Salesforce as an activity log on the relevant campaign record.
  tags:
  - marketing
  - analytics
  - adobe-analytics
  - salesforce
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: marketing-reporting
    port: 8080
    tools:
    - name: digest-campaign-performance
      description: Given an Adobe Analytics report suite ID and a Salesforce campaign ID, retrieve key campaign metrics and log a performance summary on the Salesforce campaign record.
      inputParameters:
      - name: report_suite_id
        in: body
        type: string
        description: Adobe Analytics report suite ID.
      - name: campaign_id
        in: body
        type: string
        description: Salesforce campaign record ID.
      - name: date_range
        in: body
        type: string
        description: Date range string for the report, e.g. 2025-01-01/2025-01-31.
      steps:
      - name: get-analytics
        type: call
        call: adobe-analytics.get-report
        with:
          rsid: '{{report_suite_id}}'
          dateRange: '{{date_range}}'
      - name: log-activity
        type: call
        call: salesforce-campaign.create-activity
        with:
          WhatId: '{{campaign_id}}'
          Subject: Campaign Performance Digest — {{date_range}}
          Description: 'Visits: {{get-analytics.visits}} | Conversions: {{get-analytics.conversions}} | Revenue: {{get-analytics.revenue}}'
  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: reports
      path: /ranked
      operations:
      - name: get-report
        method: POST
  - type: http
    namespace: salesforce-campaign
    baseUri: https://ibm.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: activities
      path: /sobjects/Task
      operations:
      - name: create-activity
        method: POST
Open in Framework → View in Fleet → adobe-analytics-campaign-performance-digest.yml

Runs a Teradata SQL query to extract slow-query statistics and publishes the results as a Crystal Reports data refresh. Used by data engineering agents for weekly reporting.

naftiko: '0.5'
info:
  label: Teradata Query Performance Report to Crystal Reports
  description: Runs a Teradata SQL query to extract slow-query statistics and publishes the results as a Crystal Reports data refresh. Used by data engineering agents for weekly reporting.
  tags:
  - data
  - analytics
  - teradata
  - crystal-reports
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: data-reporting
    port: 8080
    tools:
    - name: publish-query-perf-report
      description: Given a Teradata database name and a lookback period in hours, query slow-query logs and trigger a Crystal Reports refresh with the extracted performance data.
      inputParameters:
      - name: database_name
        in: body
        type: string
        description: Teradata database name to analyze.
      - name: lookback_hours
        in: body
        type: integer
        description: Number of hours to look back for slow queries.
      steps:
      - name: query-slow-queries
        type: call
        call: teradata.run-query
        with:
          database: '{{database_name}}'
          hours: '{{lookback_hours}}'
      - name: refresh-report
        type: call
        call: crystal-reports.refresh-report
        with:
          report_name: QueryPerformanceWeekly
          dataset: '{{query-slow-queries.rows}}'
  consumes:
  - type: http
    namespace: teradata
    baseUri: https://ibm-teradata.internal/api/v1
    authentication:
      type: basic
      username: $secrets.teradata_user
      password: $secrets.teradata_password
    resources:
    - name: queries
      path: /query
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: crystal-reports
    baseUri: https://ibm-bobj.internal/biprws/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/refresh
      operations:
      - name: refresh-report
        method: POST
Open in Framework → View in Fleet → teradata-query-performance-report-to-crystal-reports.yml

Queries SAP S/4HANA for material stock availability and posts a summary to the Slack procurement channel when levels are below threshold.

naftiko: '0.5'
info:
  label: SAP Material Availability Check to Slack
  description: Queries SAP S/4HANA for material stock availability and posts a summary to the Slack procurement channel when levels are below threshold.
  tags:
  - erp
  - supply-chain
  - sap
  - slack
capability:
  exposes:
  - type: mcp
    namespace: procurement
    port: 8080
    tools:
    - name: check-material-stock
      description: Given a SAP material number and plant, check stock availability and notify Slack if below threshold.
      inputParameters:
      - name: material_number
        in: body
        type: string
        description: SAP material number.
      - name: plant
        in: body
        type: string
        description: SAP plant code.
      steps:
      - name: get-stock
        type: call
        call: sap.get-material-stock
        with:
          material: '{{material_number}}'
          plant: '{{plant}}'
      - name: notify-procurement
        type: call
        call: slack.post-message
        with:
          channel: '#procurement'
          text: 'Material {{material_number}} at plant {{plant}}: Available stock = {{get-stock.available_quantity}} {{get-stock.unit}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ibm-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}}',Plant='{{plant}}')
      inputParameters:
      - name: material
        in: path
      - name: plant
        in: path
      operations:
      - name: get-material-stock
        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 → sap-material-availability-check-to-slack.yml

Queries Oracle Integration Cloud for failed integration instances over the last hour and creates a Datadog event for each failure to enable unified alerting.

naftiko: '0.5'
info:
  label: Oracle Integration Cloud Process Monitoring
  description: Queries Oracle Integration Cloud for failed integration instances over the last hour and creates a Datadog event for each failure to enable unified alerting.
  tags:
  - integration
  - observability
  - oracle-integration
  - datadog
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: integration-monitoring
    port: 8080
    tools:
    - name: monitor-oic-failures
      description: Given an Oracle Integration Cloud base URL and lookback window in minutes, retrieve failed integration instances and post each as a Datadog event for monitoring.
      inputParameters:
      - name: oic_base_url
        in: body
        type: string
        description: Oracle Integration Cloud instance base URL.
      - name: lookback_minutes
        in: body
        type: integer
        description: Number of minutes to look back for failed instances.
      steps:
      - name: get-failures
        type: call
        call: oracle-oic.get-failed-instances
        with:
          baseUrl: '{{oic_base_url}}'
          lookbackMinutes: '{{lookback_minutes}}'
      - name: post-dd-events
        type: call
        call: datadog-event.post-event
        with:
          title: OIC Integration Failure
          text: 'Failed instances: {{get-failures.failed_count}}'
          tags: source:oracle_integration,env:prod
  consumes:
  - type: http
    namespace: oracle-oic
    baseUri: https://ibm-oic.integration.ocp.oraclecloud.com/ic/api/integration/v1
    authentication:
      type: basic
      username: $secrets.oic_user
      password: $secrets.oic_password
    resources:
    - name: instances
      path: /instances
      inputParameters:
      - name: status
        in: query
      operations:
      - name: get-failed-instances
        method: GET
  - type: http
    namespace: datadog-event
    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: post-event
        method: POST
Open in Framework → View in Fleet → oracle-integration-cloud-process-monitoring.yml

Queries SAP HANA system views for memory and CPU health metrics and creates a ServiceNow monitoring record when thresholds are breached.

naftiko: '0.5'
info:
  label: SAP HANA Database Health Check
  description: Queries SAP HANA system views for memory and CPU health metrics and creates a ServiceNow monitoring record when thresholds are breached.
  tags:
  - data
  - database
  - sap-hana
  - servicenow
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: db-health
    port: 8080
    tools:
    - name: check-hana-health
      description: Given a SAP HANA system host, retrieve memory usage and CPU load from system views. If usage exceeds thresholds, create a ServiceNow monitoring event.
      inputParameters:
      - name: hana_host
        in: body
        type: string
        description: Hostname of the SAP HANA system.
      - name: memory_threshold_pct
        in: body
        type: number
        description: Memory usage percentage above which to fire an alert.
      steps:
      - name: get-hana-metrics
        type: call
        call: sap-hana.get-system-metrics
        with:
          host: '{{hana_host}}'
      - name: create-monitoring-event
        type: call
        call: servicenow-mon.create-event
        with:
          source: SAP HANA
          node: '{{hana_host}}'
          type: Memory
          severity: '3'
          description: HANA memory at {{get-hana-metrics.memory_pct}}% on {{hana_host}}
  consumes:
  - type: http
    namespace: sap-hana
    baseUri: https://{{hana_host}}:4300/sap/hana/xs/api/v1
    authentication:
      type: basic
      username: $secrets.hana_user
      password: $secrets.hana_password
    resources:
    - name: system-metrics
      path: /system/monitoring/host_information
      operations:
      - name: get-system-metrics
        method: GET
  - type: http
    namespace: servicenow-mon
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: events
      path: /table/em_event
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → sap-hana-database-health-check.yml

When Splunk detects a security anomaly, creates a ServiceNow security incident and notifies the SOC team via Slack.

naftiko: '0.5'
info:
  label: Splunk Alert to ServiceNow Security Incident
  description: When Splunk detects a security anomaly, creates a ServiceNow security incident and notifies the SOC team via Slack.
  tags:
  - security
  - siem
  - splunk
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: soc-ops
    port: 8080
    tools:
    - name: handle-splunk-alert
      description: Given a Splunk alert ID and severity, create a ServiceNow security incident and send a Slack notification to the SOC channel.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Splunk alert ID.
      - name: severity
        in: body
        type: string
        description: Alert severity level.
      - name: alert_description
        in: body
        type: string
        description: Description of the security event.
      steps:
      - name: create-sec-incident
        type: call
        call: servicenow-sec.create-incident
        with:
          short_description: 'Splunk security alert: {{alert_description}}'
          severity: '{{severity}}'
          category: security
          assignment_group: SOC_Team
      - name: notify-soc
        type: call
        call: slack.post-message
        with:
          channel: '#soc-alerts'
          text: 'Security incident {{create-sec-incident.number}} created from Splunk alert {{alert_id}} — Severity: {{severity}}'
  consumes:
  - type: http
    namespace: servicenow-sec
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/sn_si_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
Open in Framework → View in Fleet → splunk-alert-to-servicenow-security-incident.yml

When a Salesforce lead is converted, creates or updates the corresponding HubSpot contact with matched fields. Used by marketing operations agents to maintain CRM-MAP alignment.

naftiko: '0.5'
info:
  label: Salesforce Lead to HubSpot Contact Sync
  description: When a Salesforce lead is converted, creates or updates the corresponding HubSpot contact with matched fields. Used by marketing operations agents to maintain CRM-MAP alignment.
  tags:
  - sales
  - marketing
  - salesforce
  - hubspot
  - crm
capability:
  exposes:
  - type: mcp
    namespace: crm-sync
    port: 8080
    tools:
    - name: sync-lead-to-hubspot
      description: Given a Salesforce lead ID, fetch lead details and upsert the contact record in HubSpot CRM, aligning email, company, and lifecycle stage.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Salesforce Lead ID (18-char).
      steps:
      - name: get-lead
        type: call
        call: salesforce-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: upsert-contact
        type: call
        call: hubspot.upsert-contact
        with:
          email: '{{get-lead.Email}}'
          firstname: '{{get-lead.FirstName}}'
          lastname: '{{get-lead.LastName}}'
          company: '{{get-lead.Company}}'
          lifecyclestage: lead
  consumes:
  - type: http
    namespace: salesforce-lead
    baseUri: https://ibm.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: hubspot
    baseUri: https://api.hubapi.com/crm/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /objects/contacts/batch/upsert
      operations:
      - name: upsert-contact
        method: POST
Open in Framework → View in Fleet → salesforce-lead-to-hubspot-contact-sync.yml

When Datadog APM detects a latency spike above threshold, creates a Jira performance ticket and sends a Slack alert to the platform team.

naftiko: '0.5'
info:
  label: Datadog APM Latency Spike to Jira
  description: When Datadog APM detects a latency spike above threshold, creates a Jira performance ticket and sends a Slack alert to the platform team.
  tags:
  - observability
  - devops
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: perf-ops
    port: 8080
    tools:
    - name: handle-latency-spike
      description: Given a Datadog service name and latency threshold, check current p99 latency and create a Jira ticket if exceeded.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Datadog service name.
      - name: latency_threshold_ms
        in: body
        type: number
        description: P99 latency threshold in milliseconds.
      steps:
      - name: get-metrics
        type: call
        call: datadog.get-service-metrics
        with:
          service: '{{service_name}}'
      - name: create-perf-ticket
        type: call
        call: jira.create-issue
        with:
          project: PERF
          issuetype: Task
          summary: 'Latency spike: {{service_name}} p99 at {{get-metrics.p99_latency}}ms'
          priority: High
      - name: alert-platform
        type: call
        call: slack.post-message
        with:
          channel: '#platform-eng'
          text: 'Latency spike: {{service_name}} p99={{get-metrics.p99_latency}}ms (threshold: {{latency_threshold_ms}}ms) — Jira: {{create-perf-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: service-metrics
      path: /metrics/query
      operations:
      - name: get-service-metrics
        method: GET
  - type: http
    namespace: jira
    baseUri: https://ibm-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-apm-latency-spike-to-jira.yml

When Azure AD Identity Protection flags a high-risk sign-in, suspends the user in Okta and creates a ServiceNow security incident.

naftiko: '0.5'
info:
  label: Azure AD Risky Sign-In to Okta Suspension
  description: When Azure AD Identity Protection flags a high-risk sign-in, suspends the user in Okta and creates a ServiceNow security incident.
  tags:
  - security
  - identity
  - azure
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: identity-threat
    port: 8080
    tools:
    - name: handle-risky-signin
      description: Given an Azure AD risk event ID, retrieve the details, suspend the user in Okta, and create a security incident.
      inputParameters:
      - name: risk_event_id
        in: body
        type: string
        description: Azure AD risk event ID.
      steps:
      - name: get-risk-event
        type: call
        call: azure-ad.get-risk-detection
        with:
          event_id: '{{risk_event_id}}'
      - name: suspend-okta-user
        type: call
        call: okta.suspend-user
        with:
          user_id: '{{get-risk-event.userPrincipalName}}'
      - name: create-sec-incident
        type: call
        call: servicenow-sec.create-incident
        with:
          short_description: 'High-risk sign-in: {{get-risk-event.userPrincipalName}} from {{get-risk-event.ipAddress}}'
          severity: '1'
          category: security
          assignment_group: SOC_Team
  consumes:
  - type: http
    namespace: azure-ad
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.azure_graph_token
    resources:
    - name: risk-detections
      path: /identityProtection/riskDetections/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-risk-detection
        method: GET
  - type: http
    namespace: okta
    baseUri: https://ibm.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: SSWS $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{user_id}}/lifecycle/suspend
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: suspend-user
        method: POST
  - type: http
    namespace: servicenow-sec
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/sn_si_incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → azure-ad-risky-sign-in-to-okta-suspension.yml

Checks all Terraform Cloud workspaces in an organization for configuration drift and creates ServiceNow change tasks for any workspaces with unapplied plan changes.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Drift Detection
  description: Checks all Terraform Cloud workspaces in an organization for configuration drift and creates ServiceNow change tasks for any workspaces with unapplied plan changes.
  tags:
  - cloud
  - infrastructure
  - terraform
  - servicenow
  - drift-detection
capability:
  exposes:
  - type: mcp
    namespace: infra-ops
    port: 8080
    tools:
    - name: detect-terraform-drift
      description: Given a Terraform Cloud organization name, list all workspaces with pending or errored runs and create a ServiceNow change task for each drifted workspace.
      inputParameters:
      - name: org_name
        in: body
        type: string
        description: Terraform Cloud organization name.
      steps:
      - name: list-workspaces
        type: call
        call: terraform.list-workspaces
        with:
          organization: '{{org_name}}'
      - name: create-drift-task
        type: call
        call: servicenow-drift.create-task
        with:
          short_description: 'Terraform drift detected in org: {{org_name}}'
          description: 'Workspaces with drift: {{list-workspaces.drifted_count}}'
          assignment_group: Cloud_Platform
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/{{organization}}/workspaces
      inputParameters:
      - name: organization
        in: path
      operations:
      - name: list-workspaces
        method: GET
  - type: http
    namespace: servicenow-drift
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → terraform-cloud-workspace-drift-detection.yml

Checks the deployment health of a registered Azure Machine Learning model endpoint and creates a ServiceNow incident if the endpoint is unhealthy or scoring latency is degraded.

naftiko: '0.5'
info:
  label: Azure Machine Learning Model Deployment Monitor
  description: Checks the deployment health of a registered Azure Machine Learning model endpoint and creates a ServiceNow incident if the endpoint is unhealthy or scoring latency is degraded.
  tags:
  - ai
  - cloud
  - azure-machine-learning
  - servicenow
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: ml-ops
    port: 8080
    tools:
    - name: monitor-ml-endpoint
      description: Given an Azure ML workspace name and endpoint name, check real-time endpoint health and latency metrics and open a ServiceNow incident if degraded.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: Azure ML workspace name.
      - name: endpoint_name
        in: body
        type: string
        description: Online endpoint name within the workspace.
      - name: latency_threshold_ms
        in: body
        type: integer
        description: P99 latency threshold in milliseconds above which to alert.
      steps:
      - name: get-endpoint-status
        type: call
        call: azure-ml.get-endpoint
        with:
          workspaceName: '{{workspace_name}}'
          endpointName: '{{endpoint_name}}'
      - name: create-ml-incident
        type: call
        call: servicenow-ml.create-incident
        with:
          short_description: 'ML endpoint degraded: {{endpoint_name}} in {{workspace_name}}'
          category: AI_Operations
          urgency: '2'
          description: 'Endpoint state: {{get-endpoint-status.provisioningState}} | Traffic: {{get-endpoint-status.trafficRules}}'
  consumes:
  - type: http
    namespace: azure-ml
    baseUri: https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.MachineLearningServices
    authentication:
      type: bearer
      token: $secrets.azure_ml_token
    resources:
    - name: endpoints
      path: /workspaces/{{workspaceName}}/onlineEndpoints/{{endpointName}}
      inputParameters:
      - name: workspaceName
        in: path
      - name: endpointName
        in: path
      operations:
      - name: get-endpoint
        method: GET
  - type: http
    namespace: servicenow-ml
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → azure-machine-learning-model-deployment-monitor.yml

When a Palo Alto Networks firewall generates a critical threat alert, creates a ServiceNow security incident and enriches it with threat intelligence from the alert payload.

naftiko: '0.5'
info:
  label: Palo Alto Networks Security Alert to ServiceNow Incident
  description: When a Palo Alto Networks firewall generates a critical threat alert, creates a ServiceNow security incident and enriches it with threat intelligence from the alert payload.
  tags:
  - security
  - itsm
  - palo-alto-networks
  - servicenow
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: handle-firewall-alert
      description: Given a Palo Alto Networks device hostname and threat log ID, retrieve the threat details and open a P2 ServiceNow security incident with full alert context.
      inputParameters:
      - name: device_hostname
        in: body
        type: string
        description: Hostname or IP of the Palo Alto Networks firewall.
      - name: log_id
        in: body
        type: string
        description: Threat log entry ID from Palo Alto Networks.
      steps:
      - name: get-threat-log
        type: call
        call: palo-alto.get-threat-log
        with:
          hostname: '{{device_hostname}}'
          log_id: '{{log_id}}'
      - name: create-sec-incident
        type: call
        call: servicenow-sec.create-incident
        with:
          short_description: 'Firewall threat: {{get-threat-log.threat_name}} from {{get-threat-log.src_ip}}'
          category: security
          urgency: '2'
          impact: '2'
          work_notes: 'Severity: {{get-threat-log.severity}} | Destination: {{get-threat-log.dst_ip}}'
  consumes:
  - type: http
    namespace: palo-alto
    baseUri: https://{{device_hostname}}/restapi/v10.1
    authentication:
      type: apikey
      key: X-PAN-KEY
      value: $secrets.paloalto_api_key
      placement: header
    resources:
    - name: threat-logs
      path: /log/threat
      inputParameters:
      - name: log_id
        in: query
      operations:
      - name: get-threat-log
        method: GET
  - type: http
    namespace: servicenow-sec
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → palo-alto-networks-security-alert-to-servicenow-incident.yml

When Dynatrace detects an application problem, creates a ServiceNow incident with root cause details and notifies the on-call team.

naftiko: '0.5'
info:
  label: Dynatrace Problem to ServiceNow Incident
  description: When Dynatrace detects an application problem, creates a ServiceNow incident with root cause details and notifies the on-call team.
  tags:
  - observability
  - itsm
  - dynatrace
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: apm-ops
    port: 8080
    tools:
    - name: handle-dynatrace-problem
      description: Given a Dynatrace problem ID, retrieve the root cause analysis and create a ServiceNow incident.
      inputParameters:
      - name: problem_id
        in: body
        type: string
        description: Dynatrace problem ID.
      steps:
      - name: get-problem
        type: call
        call: dynatrace.get-problem
        with:
          problem_id: '{{problem_id}}'
      - name: create-incident
        type: call
        call: servicenow-ops.create-incident
        with:
          short_description: 'Dynatrace: {{get-problem.title}}'
          description: 'Root cause: {{get-problem.rootCauseEntity.name}} | Impact: {{get-problem.impactLevel}}'
          urgency: '1'
          assignment_group: Application_Support
      - name: notify-oncall
        type: call
        call: slack.post-message
        with:
          channel: '#oncall-alerts'
          text: Dynatrace problem {{problem_id}} — ServiceNow {{create-incident.number}} created
  consumes:
  - type: http
    namespace: dynatrace
    baseUri: https://ibm.live.dynatrace.com/api/v2
    authentication:
      type: apikey
      key: Authorization
      value: Api-Token $secrets.dynatrace_token
      placement: header
    resources:
    - name: problems
      path: /problems/{{problem_id}}
      inputParameters:
      - name: problem_id
        in: path
      operations:
      - name: get-problem
        method: GET
  - type: http
    namespace: servicenow-ops
    baseUri: https://ibm.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
Open in Framework → View in Fleet → dynatrace-problem-to-servicenow-incident.yml

Triggers a SAP BW query refresh for a given InfoProvider and distributes the result set to a configured Crystal Reports dashboard.

naftiko: '0.5'
info:
  label: SAP BW Report Refresh and Distribution
  description: Triggers a SAP BW query refresh for a given InfoProvider and distributes the result set to a configured Crystal Reports dashboard.
  tags:
  - data
  - analytics
  - sap-bw
  - crystal-reports
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: bw-reporting
    port: 8080
    tools:
    - name: refresh-bw-report
      description: Given a SAP BW InfoProvider name and a Crystal Reports report name, trigger the BW query refresh and push the updated dataset to the Crystal Reports server.
      inputParameters:
      - name: info_provider
        in: body
        type: string
        description: SAP BW InfoProvider technical name.
      - name: report_name
        in: body
        type: string
        description: Crystal Reports report name to refresh.
      steps:
      - name: trigger-bw-refresh
        type: call
        call: sap-bw.refresh-query
        with:
          infoProvider: '{{info_provider}}'
      - name: push-to-crystal
        type: call
        call: crystal-bw.refresh-report
        with:
          report_name: '{{report_name}}'
          data: '{{trigger-bw-refresh.result_set}}'
  consumes:
  - type: http
    namespace: sap-bw
    baseUri: https://ibm-bw.sap.com/sap/bw/ina/GetServerInfo
    authentication:
      type: basic
      username: $secrets.sap_bw_user
      password: $secrets.sap_bw_password
    resources:
    - name: queries
      path: /query/refresh
      operations:
      - name: refresh-query
        method: POST
  - type: http
    namespace: crystal-bw
    baseUri: https://ibm-bobj.internal/biprws/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/refresh
      operations:
      - name: refresh-report
        method: POST
Open in Framework → View in Fleet → sap-bw-report-refresh-and-distribution.yml

When Azure Cost Management detects a spend anomaly, creates a Jira FinOps ticket and notifies the cloud governance team.

naftiko: '0.5'
info:
  label: Azure Cost Anomaly to FinOps Jira
  description: When Azure Cost Management detects a spend anomaly, creates a Jira FinOps ticket and notifies the cloud governance team.
  tags:
  - cloud
  - finops
  - azure
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an Azure subscription and anomaly details, create a FinOps Jira ticket and notify the team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: anomaly_description
        in: body
        type: string
        description: Description of the cost anomaly.
      steps:
      - name: get-cost-details
        type: call
        call: azure-cost.get-cost-summary
        with:
          subscription_id: '{{subscription_id}}'
      - name: create-finops-ticket
        type: call
        call: jira.create-issue
        with:
          project: FINOPS
          issuetype: Task
          summary: 'Azure cost anomaly: {{anomaly_description}}'
          description: 'Subscription: {{subscription_id}} | Current spend: {{get-cost-details.total_cost}}'
      - name: notify-governance
        type: call
        call: slack.post-message
        with:
          channel: '#cloud-governance'
          text: 'Azure cost anomaly detected in subscription {{subscription_id}} — Jira: {{create-finops-ticket.key}}'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: cost-summary
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-cost-summary
        method: POST
  - type: http
    namespace: jira
    baseUri: https://ibm-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → azure-cost-anomaly-to-finops-jira.yml

Lists all active routes and services registered in the Kong API Gateway and reconciles them against a ServiceNow CMDB API record baseline.

naftiko: '0.5'
info:
  label: Kong API Gateway Route Audit
  description: Lists all active routes and services registered in the Kong API Gateway and reconciles them against a ServiceNow CMDB API record baseline.
  tags:
  - api
  - integration
  - kong
  - servicenow
  - governance
capability:
  exposes:
  - type: mcp
    namespace: api-governance
    port: 8080
    tools:
    - name: audit-kong-routes
      description: List all Kong services and routes and compare against the ServiceNow CMDB. Create a CMDB update task for any unregistered API route detected.
      inputParameters:
      - name: kong_admin_url
        in: body
        type: string
        description: Kong Admin API base URL.
      steps:
      - name: list-services
        type: call
        call: kong.list-services
        with:
          admin_url: '{{kong_admin_url}}'
      - name: create-cmdb-task
        type: call
        call: servicenow-cmdb.create-task
        with:
          short_description: Kong API audit — unregistered routes detected
          description: 'Total services: {{list-services.total}} | Unregistered: {{list-services.unregistered_count}}'
          assignment_group: API_Platform
  consumes:
  - type: http
    namespace: kong
    baseUri: https://kong-admin.ibm.internal:8001
    authentication:
      type: apikey
      key: Kong-Admin-Token
      value: $secrets.kong_admin_token
      placement: header
    resources:
    - name: services
      path: /services
      operations:
      - name: list-services
        method: GET
  - type: http
    namespace: servicenow-cmdb
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → kong-api-gateway-route-audit.yml

When a ServiceNow incident is opened, retrieves correlated Datadog alerts for the affected service and updates the incident with alert IDs and metric snapshots.

naftiko: '0.5'
info:
  label: ServiceNow Incident Triage and Datadog Correlation
  description: When a ServiceNow incident is opened, retrieves correlated Datadog alerts for the affected service and updates the incident with alert IDs and metric snapshots.
  tags:
  - itsm
  - observability
  - servicenow
  - datadog
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: handle-incident-triage
      description: Given a ServiceNow incident number and affected service name, fetch correlated Datadog alerts and enrich the incident record with alert context.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number, e.g. INC0012345.
      - name: service_name
        in: body
        type: string
        description: Name of the affected service as tagged in Datadog.
      steps:
      - name: get-incident
        type: call
        call: servicenow-read.get-incident
        with:
          number: '{{incident_number}}'
      - name: get-alerts
        type: call
        call: datadog.list-alerts
        with:
          service: '{{service_name}}'
      - name: update-incident
        type: call
        call: servicenow-write.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          work_notes: 'Correlated Datadog alerts: {{get-alerts.alert_ids}}'
  consumes:
  - type: http
    namespace: servicenow-read
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: 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: monitors
      path: /monitor
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: list-alerts
        method: GET
  - type: http
    namespace: servicenow-write
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PATCH
Open in Framework → View in Fleet → servicenow-incident-triage-and-datadog-correlation.yml

Retrieves SAP BRIM billing document totals for a given billing period and compares them against Salesforce contract ARR values to detect discrepancies.

naftiko: '0.5'
info:
  label: SAP BRIM Subscription Billing Reconciliation
  description: Retrieves SAP BRIM billing document totals for a given billing period and compares them against Salesforce contract ARR values to detect discrepancies.
  tags:
  - finance
  - erp
  - sap-s4hana
  - salesforce
  - billing
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: billing-finance
    port: 8080
    tools:
    - name: reconcile-brim-billing
      description: Given a SAP BRIM billing period and a Salesforce contract ID, fetch billed amounts from SAP and compare against the contracted ARR in Salesforce, flagging discrepancies.
      inputParameters:
      - name: billing_period
        in: body
        type: string
        description: SAP BRIM billing period in YYYYMM format.
      - name: contract_id
        in: body
        type: string
        description: Salesforce contract record ID.
      steps:
      - name: get-brim-docs
        type: call
        call: sap-brim.get-billing-docs
        with:
          billing_period: '{{billing_period}}'
      - name: get-sf-contract
        type: call
        call: salesforce-contract.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: log-reconciliation
        type: call
        call: salesforce-note.create-note
        with:
          ParentId: '{{contract_id}}'
          Title: BRIM Reconciliation {{billing_period}}
          Body: 'BRIM total: {{get-brim-docs.total_amount}} | SF ARR: {{get-sf-contract.annual_arr}}'
  consumes:
  - type: http
    namespace: sap-brim
    baseUri: https://ibm-s4.sap.com/sap/opu/odata/sap/BRIM_BILLING_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: billing-docs
      path: /BillingDocuments
      inputParameters:
      - name: billing_period
        in: query
      operations:
      - name: get-billing-docs
        method: GET
  - type: http
    namespace: salesforce-contract
    baseUri: https://ibm.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: salesforce-note
    baseUri: https://ibm.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: notes
      path: /sobjects/Note
      operations:
      - name: create-note
        method: POST
Open in Framework → View in Fleet → sap-brim-subscription-billing-reconciliation.yml

When a GitHub Actions workflow fails on a release branch, creates a ServiceNow change request and alerts via SolarWinds event. Used by DevOps agents for automated release governance.

naftiko: '0.5'
info:
  label: GitHub Actions CI Failure to ServiceNow Change
  description: When a GitHub Actions workflow fails on a release branch, creates a ServiceNow change request and alerts via SolarWinds event. Used by DevOps agents for automated release governance.
  tags:
  - devops
  - cicd
  - github
  - servicenow
  - solarwinds
capability:
  exposes:
  - type: mcp
    namespace: devops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub workflow run failure event, open a ServiceNow change request and send a SolarWinds alert event with failure context.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository full name, e.g. ibm/my-service.
      - name: run_id
        in: body
        type: string
        description: GitHub Actions workflow run ID.
      - name: branch
        in: body
        type: string
        description: Branch name where the failure occurred.
      - name: commit_sha
        in: body
        type: string
        description: Full SHA of the failing commit.
      steps:
      - name: get-run
        type: call
        call: github.get-workflow-run
        with:
          owner: ibm
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: open-change
        type: call
        call: servicenow-cr.create-change
        with:
          short_description: CI failure on {{branch}} — {{repo}} ({{commit_sha}})
          type: emergency
          description: 'Workflow run {{run_id}} failed. Conclusion: {{get-run.conclusion}}'
      - name: send-event
        type: call
        call: solarwinds.create-event
        with:
          message: 'CI failure: {{repo}} / {{branch}} — Change: {{open-change.number}}'
          severity: critical
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      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-cr
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: solarwinds
    baseUri: https://api.solarwinds.com/v1
    authentication:
      type: bearer
      token: $secrets.solarwinds_token
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → github-actions-ci-failure-to-servicenow-change.yml

Queries Azure Log Analytics for error spikes on a given service and forwards alert payloads to New Relic as custom events. Used by SRE agents for cross-platform observability correlation.

naftiko: '0.5'
info:
  label: Azure Log Analytics Alert to New Relic
  description: Queries Azure Log Analytics for error spikes on a given service and forwards alert payloads to New Relic as custom events. Used by SRE agents for cross-platform observability correlation.
  tags:
  - observability
  - cloud
  - azure-log-analytics
  - new-relic
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: cloud-obs
    port: 8080
    tools:
    - name: forward-log-alert
      description: Given an Azure Log Analytics workspace ID and KQL query, run the query and forward matching log records as custom events to New Relic for unified alerting.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Azure Log Analytics workspace GUID.
      - name: kql_query
        in: body
        type: string
        description: KQL query to run against the workspace, e.g. AzureDiagnostics | where Level == 'Error'.
      steps:
      - name: run-query
        type: call
        call: azure-logs.run-query
        with:
          workspaceId: '{{workspace_id}}'
          query: '{{kql_query}}'
      - name: post-events
        type: call
        call: newrelic-events.post-events
        with:
          eventType: AzureLogAlert
          attributes: '{{run-query.rows}}'
  consumes:
  - type: http
    namespace: azure-logs
    baseUri: https://api.loganalytics.io/v1
    authentication:
      type: bearer
      token: $secrets.azure_log_analytics_token
    resources:
    - name: query
      path: /workspaces/{{workspaceId}}/query
      inputParameters:
      - name: workspaceId
        in: path
      operations:
      - name: run-query
        method: POST
  - type: http
    namespace: newrelic-events
    baseUri: https://insights-collector.newrelic.com/v1
    authentication:
      type: apikey
      key: X-Insert-Key
      value: $secrets.newrelic_insert_key
      placement: header
    resources:
    - name: events
      path: /accounts/{{account_id}}/events
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: post-events
        method: POST
Open in Framework → View in Fleet → azure-log-analytics-alert-to-new-relic.yml

Extracts compensation band data from Workday and triggers a Power BI dataset refresh, then notifies HR leadership via Slack.

naftiko: '0.5'
info:
  label: Workday Compensation Review to Power BI
  description: Extracts compensation band data from Workday and triggers a Power BI dataset refresh, then notifies HR leadership via Slack.
  tags:
  - hr
  - analytics
  - workday
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: comp-analytics
    port: 8080
    tools:
    - name: refresh-comp-report
      description: Given a Workday report URL, extract compensation data, trigger a Power BI refresh, and notify HR.
      inputParameters:
      - name: report_url
        in: body
        type: string
        description: Workday custom report URL.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      steps:
      - name: get-comp-data
        type: call
        call: workday.get-report
        with:
          report_url: '{{report_url}}'
      - name: refresh-dataset
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-hr
        type: call
        call: slack.post-message
        with:
          channel: '#hr-leadership'
          text: Compensation review dashboard refreshed — {{get-comp-data.record_count}} records processed
  consumes:
  - 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: /ibm/reports/{{report_url}}
      inputParameters:
      - name: report_url
        in: path
      operations:
      - name: get-report
        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: 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 → workday-compensation-review-to-power-bi.yml

When a Tableau extract refresh fails, creates a ServiceNow incident and notifies the BI team via Slack with the error details.

naftiko: '0.5'
info:
  label: Tableau Dashboard Failure to ServiceNow
  description: When a Tableau extract refresh fails, creates a ServiceNow incident and notifies the BI team via Slack with the error details.
  tags:
  - analytics
  - itsm
  - tableau
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: bi-ops
    port: 8080
    tools:
    - name: handle-tableau-failure
      description: Given a Tableau datasource ID, check the last extract status and create an incident if failed.
      inputParameters:
      - name: datasource_id
        in: body
        type: string
        description: Tableau datasource ID.
      steps:
      - name: get-extract-status
        type: call
        call: tableau.get-datasource
        with:
          datasource_id: '{{datasource_id}}'
      - name: create-incident
        type: call
        call: servicenow-bi.create-incident
        with:
          short_description: 'Tableau extract failure: {{get-extract-status.name}}'
          urgency: '3'
          assignment_group: BI_Team
      - name: notify-bi
        type: call
        call: slack.post-message
        with:
          channel: '#bi-team'
          text: 'Tableau extract failed for {{get-extract-status.name}} — ServiceNow: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://tableau.ibm.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/ibm/datasources/{{datasource_id}}
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: get-datasource
        method: GET
  - type: http
    namespace: servicenow-bi
    baseUri: https://ibm.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
Open in Framework → View in Fleet → tableau-dashboard-failure-to-servicenow.yml

Queries Oracle Cloud cost management for daily spend anomalies above a configured threshold and creates a ServiceNow task for FinOps review.

naftiko: '0.5'
info:
  label: Oracle Cloud Cost Anomaly Detection
  description: Queries Oracle Cloud cost management for daily spend anomalies above a configured threshold and creates a ServiceNow task for FinOps review.
  tags:
  - cloud
  - finops
  - oracle-cloud
  - servicenow
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: detect-cost-anomaly
      description: Given an Oracle Cloud compartment OCID and a daily spend threshold in USD, check the current day's cost and open a ServiceNow FinOps review task if the threshold is exceeded.
      inputParameters:
      - name: compartment_id
        in: body
        type: string
        description: Oracle Cloud compartment OCID to analyze.
      - name: threshold_usd
        in: body
        type: number
        description: Daily spend threshold in USD above which to trigger an alert.
      steps:
      - name: get-daily-cost
        type: call
        call: oracle-cloud.get-usage-summary
        with:
          compartmentId: '{{compartment_id}}'
      - name: create-review-task
        type: call
        call: servicenow-finops.create-task
        with:
          short_description: 'Cost anomaly: {{compartment_id}} exceeded ${{threshold_usd}}'
          category: finops
          assignment_group: Cloud_FinOps
          description: 'Daily cost: ${{get-daily-cost.total_amount_usd}}'
  consumes:
  - type: http
    namespace: oracle-cloud
    baseUri: https://usageapi.us-ashburn-1.oraclecloud.com/20200107
    authentication:
      type: bearer
      token: $secrets.oracle_cloud_token
    resources:
    - name: usage-summary
      path: /usageSummary
      inputParameters:
      - name: compartmentId
        in: query
      operations:
      - name: get-usage-summary
        method: POST
  - type: http
    namespace: servicenow-finops
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → oracle-cloud-cost-anomaly-detection.yml

Retrieves the running state, instance type, and availability zone of an AWS EC2 instance by instance ID.

naftiko: '0.5'
info:
  label: AWS EC2 Instance Status Lookup
  description: Retrieves the running state, instance type, and availability zone of an AWS EC2 instance by instance ID.
  tags:
  - cloud
  - infrastructure
  - aws
capability:
  exposes:
  - type: mcp
    namespace: cloud-infra
    port: 8080
    tools:
    - name: get-ec2-status
      description: Given an EC2 instance ID, return the instance state, type, availability zone, and launch time.
      inputParameters:
      - name: instance_id
        in: body
        type: string
        description: AWS EC2 instance ID.
      call: aws.describe-instance
      with:
        instance_id: '{{instance_id}}'
  consumes:
  - type: http
    namespace: aws
    baseUri: https://ec2.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sigv4_token
      placement: header
    resources:
    - name: instances
      path: /?Action=DescribeInstances&InstanceId.1={{instance_id}}
      inputParameters:
      - name: instance_id
        in: query
      operations:
      - name: describe-instance
        method: GET
Open in Framework → View in Fleet → aws-ec2-instance-status-lookup.yml

Posts a formatted message to a Slack channel for notifications, alerts, and team communication workflows.

naftiko: '0.5'
info:
  label: Slack Channel Message Poster
  description: Posts a formatted message to a Slack channel for notifications, alerts, and team communication workflows.
  tags:
  - communication
  - slack
  - notifications
capability:
  exposes:
  - type: mcp
    namespace: messaging
    port: 8080
    tools:
    - name: post-slack-message
      description: Given a Slack channel name and message text, post the message to the channel.
      inputParameters:
      - name: channel
        in: body
        type: string
        description: Slack channel name or ID.
      - name: message
        in: body
        type: string
        description: Message text to post.
      call: slack.post-message
      with:
        channel: '{{channel}}'
        text: '{{message}}'
  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-poster.yml

Compares ADP payroll totals against Workday compensation records and creates a ServiceNow task for any discrepancies found.

naftiko: '0.5'
info:
  label: ADP Payroll Discrepancy to Workday Review
  description: Compares ADP payroll totals against Workday compensation records and creates a ServiceNow task for any discrepancies found.
  tags:
  - hr
  - finance
  - adp
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: payroll-audit
    port: 8080
    tools:
    - name: audit-payroll
      description: Given a payroll period, compare ADP run totals to Workday compensation and flag discrepancies.
      inputParameters:
      - name: payroll_period
        in: body
        type: string
        description: Payroll period code, e.g. 2026-03.
      steps:
      - name: get-adp-totals
        type: call
        call: adp.get-payroll-summary
        with:
          period: '{{payroll_period}}'
      - name: get-workday-totals
        type: call
        call: workday.get-comp-totals
        with:
          period: '{{payroll_period}}'
      - name: create-review-task
        type: call
        call: servicenow-payroll.create-task
        with:
          short_description: 'Payroll audit: ADP={{get-adp-totals.total}} vs Workday={{get-workday-totals.total}} for {{payroll_period}}'
          assignment_group: HR_Payroll
  consumes:
  - 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: period
        in: query
      operations:
      - name: get-payroll-summary
        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: compensation
      path: /ibm/compensation/totals
      inputParameters:
      - name: period
        in: query
      operations:
      - name: get-comp-totals
        method: GET
  - type: http
    namespace: servicenow-payroll
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → adp-payroll-discrepancy-to-workday-review.yml

Pulls delivery status from SAP S/4HANA and updates the corresponding Salesforce opportunity with fulfillment progress.

naftiko: '0.5'
info:
  label: SAP S/4HANA Delivery Status to Salesforce
  description: Pulls delivery status from SAP S/4HANA and updates the corresponding Salesforce opportunity with fulfillment progress.
  tags:
  - erp
  - crm
  - sap
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: fulfillment
    port: 8080
    tools:
    - name: sync-delivery-status
      description: Given a SAP delivery number and Salesforce opportunity ID, update the opportunity with delivery progress.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: SAP delivery document number.
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: get-delivery
        type: call
        call: sap.get-delivery
        with:
          delivery: '{{delivery_number}}'
      - name: update-sf-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          Description: 'Delivery {{delivery_number}}: Status={{get-delivery.OverallStatus}}, Shipped={{get-delivery.ActualGoodsMovementDate}}'
  consumes:
  - type: http
    namespace: sap
    baseUri: https://ibm-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}}')
      inputParameters:
      - name: delivery
        in: path
      operations:
      - name: get-delivery
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://ibm.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 → sap-s-4hana-delivery-status-to-salesforce.yml

Extracts the monthly headcount snapshot from Workday and loads it into Snowflake for HR analytics and workforce planning dashboards.

naftiko: '0.5'
info:
  label: Workday Headcount Report to Snowflake
  description: Extracts the monthly headcount snapshot from Workday and loads it into Snowflake for HR analytics and workforce planning dashboards.
  tags:
  - hr
  - data
  - workday
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: hr-analytics
    port: 8080
    tools:
    - name: sync-headcount
      description: Given an as-of date, extract the Workday headcount snapshot and load into Snowflake.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: Date for the headcount snapshot.
      steps:
      - name: get-headcount
        type: call
        call: workday.get-headcount-report
        with:
          effective_date: '{{as_of_date}}'
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO HR.HEADCOUNT_SNAPSHOTS (snapshot_date, department, count) VALUES ('{{as_of_date}}', '{{get-headcount.department}}', {{get-headcount.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: headcount
      path: /ibm/reports/headcount?effectiveDate={{effective_date}}
      inputParameters:
      - name: effective_date
        in: query
      operations:
      - name: get-headcount-report
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://ibm.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 → workday-headcount-report-to-snowflake.yml

Queries Snowflake warehouse credit consumption and, when budget threshold is exceeded, creates a ServiceNow task and notifies the FinOps team.

naftiko: '0.5'
info:
  label: Snowflake Cost Alert to FinOps Slack
  description: Queries Snowflake warehouse credit consumption and, when budget threshold is exceeded, creates a ServiceNow task and notifies the FinOps team.
  tags:
  - data
  - finops
  - snowflake
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-finops
    port: 8080
    tools:
    - name: check-snowflake-cost
      description: Given a Snowflake warehouse name and budget threshold, check credit usage and alert if exceeded.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: Snowflake warehouse name.
      - name: budget_credits
        in: body
        type: number
        description: Monthly credit budget threshold.
      steps:
      - name: get-usage
        type: call
        call: snowflake.execute-query
        with:
          statement: SELECT SUM(CREDITS_USED) as total_credits FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE WAREHOUSE_NAME='{{warehouse_name}}' AND START_TIME >= DATE_TRUNC('MONTH', CURRENT_DATE())
      - name: create-task
        type: call
        call: servicenow-fin.create-task
        with:
          short_description: 'Snowflake cost alert: {{warehouse_name}} at {{get-usage.total_credits}} credits'
          assignment_group: FinOps
      - name: notify-finops
        type: call
        call: slack.post-message
        with:
          channel: '#finops'
          text: 'Snowflake warehouse {{warehouse_name}} has consumed {{get-usage.total_credits}} credits (budget: {{budget_credits}})'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://ibm.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-fin
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-cost-alert-to-finops-slack.yml

Retrieves the service dependency map from Datadog APM for a given service, showing upstream and downstream dependencies.

naftiko: '0.5'
info:
  label: Datadog Service Map Lookup
  description: Retrieves the service dependency map from Datadog APM for a given service, showing upstream and downstream dependencies.
  tags:
  - observability
  - datadog
  - apm
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-service-dependencies
      description: Given a Datadog service name, return the upstream and downstream service dependencies from the APM service map.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Datadog APM service name.
      call: datadog.get-service-dependencies
      with:
        service: '{{service_name}}'
  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: service-dependencies
      path: /service_dependencies
      inputParameters:
      - name: service
        in: query
      operations:
      - name: get-service-dependencies
        method: GET
Open in Framework → View in Fleet → datadog-service-map-lookup.yml

When an AWS CloudWatch alarm enters ALARM state, creates a ServiceNow incident and notifies the infrastructure team via Slack.

naftiko: '0.5'
info:
  label: AWS CloudWatch Alarm to ServiceNow Incident
  description: When an AWS CloudWatch alarm enters ALARM state, creates a ServiceNow incident and notifies the infrastructure team via Slack.
  tags:
  - cloud
  - itsm
  - aws
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cloud-ops
    port: 8080
    tools:
    - name: handle-cloudwatch-alarm
      description: Given a CloudWatch alarm name, retrieve alarm details and create a ServiceNow incident with Slack notification.
      inputParameters:
      - name: alarm_name
        in: body
        type: string
        description: CloudWatch alarm name.
      steps:
      - name: get-alarm
        type: call
        call: cloudwatch.describe-alarm
        with:
          alarm_name: '{{alarm_name}}'
      - name: create-incident
        type: call
        call: servicenow-ops.create-incident
        with:
          short_description: 'CloudWatch alarm: {{alarm_name}} — {{get-alarm.StateReason}}'
          urgency: '2'
          impact: '2'
          assignment_group: Cloud_Infrastructure
      - name: notify-infra
        type: call
        call: slack.post-message
        with:
          channel: '#infra-alerts'
          text: ServiceNow {{create-incident.number}} created for CloudWatch alarm {{alarm_name}}
  consumes:
  - type: http
    namespace: cloudwatch
    baseUri: https://monitoring.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_sigv4_token
      placement: header
    resources:
    - name: alarms
      path: /?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}
      inputParameters:
      - name: alarm_name
        in: query
      operations:
      - name: describe-alarm
        method: GET
  - type: http
    namespace: servicenow-ops
    baseUri: https://ibm.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
Open in Framework → View in Fleet → aws-cloudwatch-alarm-to-servicenow-incident.yml

Compares Terraform Cloud state against ServiceNow CMDB records and creates reconciliation tasks for any configuration drift detected.

naftiko: '0.5'
info:
  label: ServiceNow CMDB Drift Detection
  description: Compares Terraform Cloud state against ServiceNow CMDB records and creates reconciliation tasks for any configuration drift detected.
  tags:
  - itsm
  - infrastructure
  - servicenow
  - terraform
  - governance
capability:
  exposes:
  - type: mcp
    namespace: cmdb-audit
    port: 8080
    tools:
    - name: detect-cmdb-drift
      description: Given a Terraform workspace and ServiceNow CMDB class, compare resource counts and create tasks for discrepancies.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: Terraform Cloud workspace name.
      - name: cmdb_class
        in: body
        type: string
        description: ServiceNow CMDB class name.
      steps:
      - name: get-tf-resources
        type: call
        call: terraform.get-workspace-resources
        with:
          workspace: '{{workspace_name}}'
      - name: get-cmdb-records
        type: call
        call: servicenow-cmdb.get-records
        with:
          class_name: '{{cmdb_class}}'
      - name: create-recon-task
        type: call
        call: servicenow-cmdb.create-task
        with:
          short_description: 'CMDB drift: Terraform has {{get-tf-resources.count}} resources vs CMDB {{get-cmdb-records.count}} records'
          assignment_group: Configuration_Management
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspace-resources
      path: /organizations/ibm/workspaces/{{workspace}}/resources
      inputParameters:
      - name: workspace
        in: path
      operations:
      - name: get-workspace-resources
        method: GET
  - type: http
    namespace: servicenow-cmdb
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: cmdb
      path: /table/{{class_name}}
      inputParameters:
      - name: class_name
        in: path
      operations:
      - name: get-records
        method: GET
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → servicenow-cmdb-drift-detection.yml

Runs a Snowflake data quality check query and, if anomalies are detected, creates a Jira task for the data engineering team and notifies Slack.

naftiko: '0.5'
info:
  label: Snowflake Data Quality to Jira Task
  description: Runs a Snowflake data quality check query and, if anomalies are detected, creates a Jira task for the data engineering team and notifies Slack.
  tags:
  - data
  - quality
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: check-data-quality
      description: Given a Snowflake quality check query, execute it and create a Jira task if anomalies exceed the threshold.
      inputParameters:
      - name: quality_query
        in: body
        type: string
        description: SQL query that returns anomaly count.
      - name: threshold
        in: body
        type: number
        description: Anomaly count threshold to trigger a task.
      steps:
      - name: run-check
        type: call
        call: snowflake.execute-query
        with:
          statement: '{{quality_query}}'
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project: DATA
          issuetype: Task
          summary: Data quality anomaly detected — {{run-check.anomaly_count}} records
          priority: High
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#data-engineering'
          text: 'Data quality alert: {{run-check.anomaly_count}} anomalies found. Jira: {{create-jira-task.key}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://ibm.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://ibm-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-to-jira-task.yml

When a GitHub pull request is merged to main, creates a Datadog deployment event and updates the ServiceNow change request.

naftiko: '0.5'
info:
  label: GitHub PR Merge to Datadog Deployment Marker
  description: When a GitHub pull request is merged to main, creates a Datadog deployment event and updates the ServiceNow change request.
  tags:
  - devops
  - observability
  - github
  - datadog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: deploy-tracking
    port: 8080
    tools:
    - name: track-pr-merge
      description: Given a merged PR number and repo, create a Datadog deployment marker and close the associated ServiceNow change request.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: pr_number
        in: body
        type: string
        description: Pull request number.
      - name: change_number
        in: body
        type: string
        description: ServiceNow change request number.
      steps:
      - name: get-pr
        type: call
        call: github.get-pull-request
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
      - name: create-dd-event
        type: call
        call: datadog.create-event
        with:
          title: 'Deployment: {{get-pr.title}}'
          text: 'PR #{{pr_number}} merged by {{get-pr.merged_by.login}}'
          tags: repo:{{repo}}
      - name: close-change
        type: call
        call: servicenow-chg.update-change
        with:
          number: '{{change_number}}'
          state: closed
          close_notes: 'Deployed via PR #{{pr_number}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{repo}}/pulls/{{pr_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: get-pull-request
        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-chg
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: update-change
        method: PATCH
Open in Framework → View in Fleet → github-pr-merge-to-datadog-deployment-marker.yml

When a PagerDuty incident fires, retrieves the corresponding Confluence runbook and posts the remediation steps to the incident Slack channel.

naftiko: '0.5'
info:
  label: Confluence Runbook Trigger from PagerDuty
  description: When a PagerDuty incident fires, retrieves the corresponding Confluence runbook and posts the remediation steps to the incident Slack channel.
  tags:
  - operations
  - documentation
  - pagerduty
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: runbook-ops
    port: 8080
    tools:
    - name: fetch-runbook
      description: Given a PagerDuty incident ID, look up the service, find the Confluence runbook, and post steps to Slack.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: PagerDuty incident ID.
      - name: runbook_space
        in: body
        type: string
        description: Confluence space key for runbooks.
      steps:
      - name: get-incident
        type: call
        call: pagerduty.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: get-runbook
        type: call
        call: confluence.get-page
        with:
          spaceKey: '{{runbook_space}}'
          title: 'Runbook: {{get-incident.service.summary}}'
      - name: post-runbook
        type: call
        call: slack.post-message
        with:
          channel: '#incident-{{incident_id}}'
          text: 'Runbook for {{get-incident.service.summary}}:

            {{get-runbook.body.storage.value}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://ibm-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: get-page
        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 → confluence-runbook-trigger-from-pagerduty.yml

Identifies Salesforce contracts expiring within 90 days and enrolls the contacts in a HubSpot renewal nurture workflow.

naftiko: '0.5'
info:
  label: Salesforce Contract Expiry to HubSpot Nurture
  description: Identifies Salesforce contracts expiring within 90 days and enrolls the contacts in a HubSpot renewal nurture workflow.
  tags:
  - crm
  - marketing
  - salesforce
  - hubspot
  - slack
capability:
  exposes:
  - type: mcp
    namespace: renewal-nurture
    port: 8080
    tools:
    - name: trigger-renewal-nurture
      description: Given a Salesforce contract ID expiring soon, enroll the account contact in a HubSpot nurture workflow and notify the CSM.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: Salesforce contract ID.
      steps:
      - name: get-contract
        type: call
        call: salesforce.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: enroll-nurture
        type: call
        call: hubspot.enroll-workflow
        with:
          email: '{{get-contract.Contact.Email}}'
          workflow_id: $secrets.hubspot_renewal_workflow_id
      - name: notify-csm
        type: call
        call: slack.post-message
        with:
          channel: '#customer-success'
          text: Contract {{contract_id}} for {{get-contract.Account.Name}} expires {{get-contract.EndDate}} — HubSpot nurture enrolled
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ibm.my.salesforce.com/services/data/v59.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: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: workflows
      path: /automation/v4/actions/workflows/{{workflow_id}}/enrollments
      inputParameters:
      - name: workflow_id
        in: path
      operations:
      - name: enroll-workflow
        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 → salesforce-contract-expiry-to-hubspot-nurture.yml

Checks the health status of Red Hat OpenShift cluster nodes and pushes custom metrics to Datadog for unified monitoring dashboards.

naftiko: '0.5'
info:
  label: Red Hat OpenShift Cluster Health to Datadog
  description: Checks the health status of Red Hat OpenShift cluster nodes and pushes custom metrics to Datadog for unified monitoring dashboards.
  tags:
  - infrastructure
  - observability
  - red-hat
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: k8s-health
    port: 8080
    tools:
    - name: check-cluster-health
      description: Given an OpenShift cluster URL, check node readiness and push health metrics to Datadog.
      inputParameters:
      - name: cluster_url
        in: body
        type: string
        description: OpenShift API server URL.
      steps:
      - name: get-nodes
        type: call
        call: openshift.get-nodes
        with:
          cluster_url: '{{cluster_url}}'
      - name: push-metrics
        type: call
        call: datadog.submit-metrics
        with:
          series_name: openshift.node.ready_count
          value: '{{get-nodes.ready_count}}'
          tags: cluster:{{cluster_url}}
      - name: notify-ops
        type: call
        call: slack.post-message
        with:
          channel: '#k8s-ops'
          text: 'OpenShift cluster health: {{get-nodes.ready_count}}/{{get-nodes.total_count}} nodes ready'
  consumes:
  - type: http
    namespace: openshift
    baseUri: '{{cluster_url}}'
    authentication:
      type: bearer
      token: $secrets.openshift_token
    resources:
    - name: nodes
      path: /api/v1/nodes
      operations:
      - name: get-nodes
        method: GET
  - 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: metrics
      path: /series
      operations:
      - name: submit-metrics
        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 → red-hat-openshift-cluster-health-to-datadog.yml

When SolarWinds detects a node down event, creates a PagerDuty incident and updates the ServiceNow CMDB with the outage status.

naftiko: '0.5'
info:
  label: SolarWinds Node Down to PagerDuty
  description: When SolarWinds detects a node down event, creates a PagerDuty incident and updates the ServiceNow CMDB with the outage status.
  tags:
  - networking
  - incident-response
  - solarwinds
  - pagerduty
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: network-ops
    port: 8080
    tools:
    - name: handle-node-down
      description: Given a SolarWinds node ID, retrieve the node details, create a PagerDuty incident, and update the CMDB.
      inputParameters:
      - name: node_id
        in: body
        type: string
        description: SolarWinds node ID.
      steps:
      - name: get-node
        type: call
        call: solarwinds.get-node
        with:
          node_id: '{{node_id}}'
      - name: create-pd-incident
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pd_network_service_id
          title: 'Node down: {{get-node.Caption}} ({{get-node.IPAddress}})'
          urgency: high
      - name: update-cmdb
        type: call
        call: servicenow-cmdb.update-ci
        with:
          name: '{{get-node.Caption}}'
          operational_status: non-operational
  consumes:
  - type: http
    namespace: solarwinds
    baseUri: https://solarwinds.ibm.com:17778/SolarWinds/InformationService/v3/Json
    authentication:
      type: basic
      username: $secrets.solarwinds_user
      password: $secrets.solarwinds_password
    resources:
    - name: nodes
      path: /Query?query=SELECT+Caption,IPAddress,Status+FROM+Orion.Nodes+WHERE+NodeID={{node_id}}
      inputParameters:
      - name: node_id
        in: query
      operations:
      - name: get-node
        method: GET
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: servicenow-cmdb
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: cmdb
      path: /table/cmdb_ci
      operations:
      - name: update-ci
        method: PATCH
Open in Framework → View in Fleet → solarwinds-node-down-to-pagerduty.yml

When a Grafana alert fires, creates a ServiceNow incident and attaches the relevant Confluence runbook link for remediation.

naftiko: '0.5'
info:
  label: Grafana Alert to ServiceNow with Runbook
  description: When a Grafana alert fires, creates a ServiceNow incident and attaches the relevant Confluence runbook link for remediation.
  tags:
  - observability
  - itsm
  - grafana
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: alert-mgmt
    port: 8080
    tools:
    - name: handle-grafana-alert
      description: Given a Grafana alert rule name and service, create a ServiceNow incident and attach the Confluence runbook.
      inputParameters:
      - name: alert_name
        in: body
        type: string
        description: Grafana alert rule name.
      - name: service_name
        in: body
        type: string
        description: Affected service name.
      steps:
      - name: get-runbook
        type: call
        call: confluence.get-page
        with:
          spaceKey: RUNBOOKS
          title: 'Runbook: {{service_name}}'
      - name: create-incident
        type: call
        call: servicenow-ops.create-incident
        with:
          short_description: 'Grafana alert: {{alert_name}} on {{service_name}}'
          description: 'Runbook: {{get-runbook.url}}'
          urgency: '2'
          assignment_group: Platform_SRE
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://ibm-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: servicenow-ops
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → grafana-alert-to-servicenow-with-runbook.yml

When an Azure Databricks job fails, retrieves the error output and creates a Jira ticket for the data engineering team.

naftiko: '0.5'
info:
  label: Azure Databricks Job Failure to Jira
  description: When an Azure Databricks job fails, retrieves the error output and creates a Jira ticket for the data engineering team.
  tags:
  - data
  - devops
  - azure-databricks
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: handle-databricks-failure
      description: Given a Databricks run ID, get the failure details and create a Jira ticket.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: Databricks job run ID.
      steps:
      - name: get-run
        type: call
        call: databricks.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-ticket
        type: call
        call: jira.create-issue
        with:
          project: DATA
          issuetype: Bug
          summary: 'Databricks job failure: {{get-run.run_name}}'
          description: 'Error: {{get-run.state.state_message}} | Cluster: {{get-run.cluster_instance.cluster_id}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#data-engineering'
          text: 'Databricks job {{get-run.run_name}} failed — Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://adb-ibm.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: jira
    baseUri: https://ibm-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → azure-databricks-job-failure-to-jira.yml

When Okta flags a suspicious login event, triggers a Splunk investigation query and creates a ServiceNow security incident with findings.

naftiko: '0.5'
info:
  label: Okta Suspicious Login to Splunk Investigation
  description: When Okta flags a suspicious login event, triggers a Splunk investigation query and creates a ServiceNow security incident with findings.
  tags:
  - security
  - identity
  - okta
  - splunk
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: threat-response
    port: 8080
    tools:
    - name: investigate-suspicious-login
      description: Given an Okta event ID, retrieve the event details, run a Splunk correlation query, and create a security incident.
      inputParameters:
      - name: event_id
        in: body
        type: string
        description: Okta system log event ID.
      steps:
      - name: get-okta-event
        type: call
        call: okta.get-event
        with:
          event_id: '{{event_id}}'
      - name: run-splunk-query
        type: call
        call: splunk.create-search
        with:
          search: index=network src_ip={{get-okta-event.client.ipAddress}} earliest=-24h
      - name: create-sec-incident
        type: call
        call: servicenow-sec.create-incident
        with:
          short_description: 'Suspicious login: {{get-okta-event.actor.displayName}} from {{get-okta-event.client.ipAddress}}'
          category: security
          severity: '2'
          assignment_group: SOC_Team
  consumes:
  - type: http
    namespace: okta
    baseUri: https://ibm.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: SSWS $secrets.okta_api_token
      placement: header
    resources:
    - name: events
      path: /logs/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-event
        method: GET
  - type: http
    namespace: splunk
    baseUri: https://splunk.ibm.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-jobs
      path: /search/jobs
      operations:
      - name: create-search
        method: POST
  - type: http
    namespace: servicenow-sec
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: incidents
      path: /table/sn_si_incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → okta-suspicious-login-to-splunk-investigation.yml

Lists all active Salesforce Flow and Process Builder automations and logs a governance snapshot to a Crystal Reports dataset for quarterly review.

naftiko: '0.5'
info:
  label: Salesforce Automation Workflow Audit
  description: Lists all active Salesforce Flow and Process Builder automations and logs a governance snapshot to a Crystal Reports dataset for quarterly review.
  tags:
  - sales
  - governance
  - salesforce
  - crystal-reports
  - audit
capability:
  exposes:
  - type: mcp
    namespace: sf-governance
    port: 8080
    tools:
    - name: audit-sf-automations
      description: List all active Salesforce Flows and Process Builder records and push the governance snapshot to a Crystal Reports data store for quarterly compliance review.
      inputParameters:
      - name: report_quarter
        in: body
        type: string
        description: Report quarter label, e.g. Q1-2025.
      steps:
      - name: list-flows
        type: call
        call: salesforce-flows.list-flows
        with:
          status: Active
      - name: push-to-report
        type: call
        call: crystal-gov.refresh-report
        with:
          report_name: SalesforceAutomationAudit
          quarter: '{{report_quarter}}'
          data: '{{list-flows.records}}'
  consumes:
  - type: http
    namespace: salesforce-flows
    baseUri: https://ibm.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: flows
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: list-flows
        method: GET
  - type: http
    namespace: crystal-gov
    baseUri: https://ibm-bobj.internal/biprws/v1
    authentication:
      type: bearer
      token: $secrets.crystal_reports_token
    resources:
    - name: reports
      path: /reports/refresh
      operations:
      - name: refresh-report
        method: POST
Open in Framework → View in Fleet → salesforce-automation-workflow-audit.yml

When a Terraform Cloud run produces a plan with resource changes, creates a ServiceNow change request for approval before applying.

naftiko: '0.5'
info:
  label: Terraform Plan Approval to ServiceNow Change
  description: When a Terraform Cloud run produces a plan with resource changes, creates a ServiceNow change request for approval before applying.
  tags:
  - infrastructure
  - itsm
  - terraform
  - servicenow
  - governance
capability:
  exposes:
  - type: mcp
    namespace: infra-governance
    port: 8080
    tools:
    - name: create-change-for-plan
      description: Given a Terraform run ID, retrieve the plan summary and create a ServiceNow change request for CAB approval.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: Terraform Cloud run ID.
      steps:
      - name: get-run
        type: call
        call: terraform.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-change
        type: call
        call: servicenow-chg.create-change
        with:
          short_description: 'Terraform plan: {{get-run.plan_summary.resource_additions}} add, {{get-run.plan_summary.resource_changes}} change, {{get-run.plan_summary.resource_destructions}} destroy'
          type: standard
          category: infrastructure
          assignment_group: Cloud_Platform
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#infra-changes'
          text: Change {{create-change.number}} created for Terraform run {{run_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/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: servicenow-chg
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        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 → terraform-plan-approval-to-servicenow-change.yml

Retrieves active threat indicators from Palo Alto Networks and creates or updates Cloudflare WAF custom rules to block matching IP ranges.

naftiko: '0.5'
info:
  label: Cloudflare WAF Rule Update from Threat Intelligence
  description: Retrieves active threat indicators from Palo Alto Networks and creates or updates Cloudflare WAF custom rules to block matching IP ranges.
  tags:
  - security
  - cloudflare
  - palo-alto-networks
  - threat-intelligence
  - waf
capability:
  exposes:
  - type: mcp
    namespace: security-waf
    port: 8080
    tools:
    - name: update-waf-blocklist
      description: Given a Palo Alto Networks threat feed type, fetch current malicious IP indicators and push blocking WAF rules to the specified Cloudflare zone.
      inputParameters:
      - name: threat_feed_type
        in: body
        type: string
        description: Palo Alto threat feed category, e.g. command-and-control.
      - name: cloudflare_zone_id
        in: body
        type: string
        description: Cloudflare zone ID to apply WAF rules to.
      steps:
      - name: get-indicators
        type: call
        call: palo-alto-ti.get-threat-indicators
        with:
          feed_type: '{{threat_feed_type}}'
      - name: update-waf-rule
        type: call
        call: cloudflare.update-waf-rule
        with:
          zone_id: '{{cloudflare_zone_id}}'
          ip_list: '{{get-indicators.ip_addresses}}'
          action: block
  consumes:
  - type: http
    namespace: palo-alto-ti
    baseUri: https://autofocus.paloaltonetworks.com/api/v1.0
    authentication:
      type: apikey
      key: apiKey
      value: $secrets.paloalto_autofocus_key
      placement: query
    resources:
    - name: threat-indicators
      path: /samples/search
      operations:
      - name: get-threat-indicators
        method: POST
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: waf-rules
      path: /zones/{{zone_id}}/firewall/rules
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: update-waf-rule
        method: PUT
Open in Framework → View in Fleet → cloudflare-waf-rule-update-from-threat-intelligence.yml

Generates a quarterly access review by pulling all Okta application assignments, loading to Snowflake, and creating a ServiceNow access review task.

naftiko: '0.5'
info:
  label: Okta Quarterly Access Review Report
  description: Generates a quarterly access review by pulling all Okta application assignments, loading to Snowflake, and creating a ServiceNow access review task.
  tags:
  - security
  - compliance
  - okta
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-access-review
      description: Pull all Okta app assignments, load into Snowflake for analysis, and create a ServiceNow review task.
      inputParameters:
      - name: review_quarter
        in: body
        type: string
        description: Quarter label, e.g. Q1-2026.
      steps:
      - name: get-app-assignments
        type: call
        call: okta.list-app-users
        with:
          limit: '200'
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO SECURITY.ACCESS_REVIEWS (quarter, app_count) VALUES ('{{review_quarter}}', {{get-app-assignments.total}})
      - name: create-review-task
        type: call
        call: servicenow-sec.create-task
        with:
          short_description: 'Quarterly access review: {{review_quarter}} — {{get-app-assignments.total}} assignments'
          assignment_group: IAM_Team
  consumes:
  - type: http
    namespace: okta
    baseUri: https://ibm.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: SSWS $secrets.okta_api_token
      placement: header
    resources:
    - name: app-users
      path: /apps
      operations:
      - name: list-app-users
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://ibm.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-sec
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → okta-quarterly-access-review-report.yml

When New Relic detects an application error rate spike, creates a Jira bug ticket and notifies the engineering team via Slack.

naftiko: '0.5'
info:
  label: New Relic Error Spike to Jira Bug
  description: When New Relic detects an application error rate spike, creates a Jira bug ticket and notifies the engineering team via Slack.
  tags:
  - observability
  - devops
  - new-relic
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: error-tracking
    port: 8080
    tools:
    - name: handle-error-spike
      description: Given a New Relic application ID and error threshold, check the error rate, create a Jira bug if exceeded, and notify Slack.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: New Relic application ID.
      - name: error_threshold
        in: body
        type: number
        description: Error rate percentage threshold.
      steps:
      - name: get-app-metrics
        type: call
        call: newrelic.get-app-metrics
        with:
          app_id: '{{app_id}}'
      - name: create-bug
        type: call
        call: jira.create-issue
        with:
          project: ENG
          issuetype: Bug
          summary: 'Error spike: {{get-app-metrics.app_name}} at {{get-app-metrics.error_rate}}%'
          priority: High
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '#engineering'
          text: 'Error spike detected for {{get-app-metrics.app_name}} — Jira: {{create-bug.key}}'
  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: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
  - type: http
    namespace: jira
    baseUri: https://ibm-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → new-relic-error-spike-to-jira-bug.yml

Monitors Oracle GoldenGate replication lag and, when threshold is exceeded, creates a ServiceNow incident and notifies the DBA team.

naftiko: '0.5'
info:
  label: Oracle GoldenGate Replication Lag Alert
  description: Monitors Oracle GoldenGate replication lag and, when threshold is exceeded, creates a ServiceNow incident and notifies the DBA team.
  tags:
  - data
  - database
  - oracle
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: db-replication
    port: 8080
    tools:
    - name: check-replication-lag
      description: Given a GoldenGate process name and lag threshold, check the lag and alert if exceeded.
      inputParameters:
      - name: process_name
        in: body
        type: string
        description: GoldenGate extract/replicat process name.
      - name: lag_threshold_seconds
        in: body
        type: number
        description: Maximum acceptable lag in seconds.
      steps:
      - name: get-lag
        type: call
        call: goldengate.get-process-status
        with:
          process_name: '{{process_name}}'
      - name: create-incident
        type: call
        call: servicenow-db.create-incident
        with:
          short_description: 'GoldenGate lag alert: {{process_name}} at {{get-lag.lag_seconds}}s'
          urgency: '2'
          assignment_group: DBA_Team
      - name: notify-dba
        type: call
        call: slack.post-message
        with:
          channel: '#dba-alerts'
          text: 'GoldenGate replication lag: {{process_name}} = {{get-lag.lag_seconds}}s (threshold: {{lag_threshold_seconds}}s)'
  consumes:
  - type: http
    namespace: goldengate
    baseUri: https://goldengate.ibm.com/api/v2
    authentication:
      type: basic
      username: $secrets.gg_user
      password: $secrets.gg_password
    resources:
    - name: processes
      path: /processes/{{process_name}}/status
      inputParameters:
      - name: process_name
        in: path
      operations:
      - name: get-process-status
        method: GET
  - type: http
    namespace: servicenow-db
    baseUri: https://ibm.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
Open in Framework → View in Fleet → oracle-goldengate-replication-lag-alert.yml

Syncs completed Pluralsight course data for an employee to their PeopleSoft HCM training record. Used by L&D agents for compliance tracking.

naftiko: '0.5'
info:
  label: Pluralsight Learning Completion to PeopleSoft Training Record
  description: Syncs completed Pluralsight course data for an employee to their PeopleSoft HCM training record. Used by L&D agents for compliance tracking.
  tags:
  - hr
  - learning
  - pluralsight
  - peoplesoft
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: learning-sync
    port: 8080
    tools:
    - name: sync-learning-completion
      description: Given a Pluralsight user handle and a PeopleSoft employee ID, retrieve all completed courses from Pluralsight and upsert corresponding training records in PeopleSoft HCM.
      inputParameters:
      - name: pluralsight_handle
        in: body
        type: string
        description: Pluralsight user handle or email.
      - name: employee_id
        in: body
        type: string
        description: PeopleSoft employee ID.
      steps:
      - name: get-completions
        type: call
        call: pluralsight.get-completions
        with:
          handle: '{{pluralsight_handle}}'
      - name: upsert-training
        type: call
        call: peoplesoft-training.upsert-training
        with:
          employee_id: '{{employee_id}}'
          courses: '{{get-completions.courses}}'
  consumes:
  - type: http
    namespace: pluralsight
    baseUri: https://api.pluralsight.com/v2
    authentication:
      type: bearer
      token: $secrets.pluralsight_token
    resources:
    - name: completions
      path: /users/{{handle}}/courses/completions
      inputParameters:
      - name: handle
        in: path
      operations:
      - name: get-completions
        method: GET
  - type: http
    namespace: peoplesoft-training
    baseUri: https://ibm-ps.internal/hcm/api/v1
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: training-records
      path: /employees/{{employee_id}}/training
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: upsert-training
        method: PUT
Open in Framework → View in Fleet → pluralsight-learning-completion-to-peoplesoft-training-record.yml

Retrieves the current state and last run status of a Terraform Cloud workspace for infrastructure management queries.

naftiko: '0.5'
info:
  label: Terraform Workspace Status Lookup
  description: Retrieves the current state and last run status of a Terraform Cloud workspace for infrastructure management queries.
  tags:
  - infrastructure
  - terraform
  - cloud
capability:
  exposes:
  - type: mcp
    namespace: infra
    port: 8080
    tools:
    - name: get-workspace-status
      description: Given a Terraform Cloud organization and workspace name, return the workspace status, last run state, and resource count.
      inputParameters:
      - name: organization
        in: body
        type: string
        description: Terraform Cloud organization name.
      - name: workspace_name
        in: body
        type: string
        description: Workspace name.
      call: terraform.get-workspace
      with:
        org: '{{organization}}'
        workspace: '{{workspace_name}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/{{org}}/workspaces/{{workspace}}
      inputParameters:
      - name: org
        in: path
      - name: workspace
        in: path
      operations:
      - name: get-workspace
        method: GET
Open in Framework → View in Fleet → terraform-workspace-status-lookup.yml

Resets a user MFA factors in Okta based on an approved ServiceNow request, then updates the ticket with completion status.

naftiko: '0.5'
info:
  label: Okta MFA Reset with ServiceNow Ticket
  description: Resets a user MFA factors in Okta based on an approved ServiceNow request, then updates the ticket with completion status.
  tags:
  - security
  - identity
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: identity-ops
    port: 8080
    tools:
    - name: reset-mfa
      description: Given a ServiceNow request number and user email, reset the user MFA in Okta and update the ServiceNow ticket.
      inputParameters:
      - name: request_number
        in: body
        type: string
        description: ServiceNow request number.
      - name: user_email
        in: body
        type: string
        description: User email for MFA reset.
      steps:
      - name: reset-okta-mfa
        type: call
        call: okta.reset-factors
        with:
          user_id: '{{user_email}}'
      - name: update-ticket
        type: call
        call: servicenow-req.update-request
        with:
          number: '{{request_number}}'
          state: closed_complete
          close_notes: MFA factors reset for {{user_email}}
  consumes:
  - type: http
    namespace: okta
    baseUri: https://ibm.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: SSWS $secrets.okta_api_token
      placement: header
    resources:
    - name: factors
      path: /users/{{user_id}}/lifecycle/reset_factors
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: reset-factors
        method: POST
  - type: http
    namespace: servicenow-req
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: update-request
        method: PATCH
Open in Framework → View in Fleet → okta-mfa-reset-with-servicenow-ticket.yml

When a PagerDuty incident is resolved, generates a postmortem page in Confluence with incident timeline and notifies the SRE team.

naftiko: '0.5'
info:
  label: PagerDuty Incident to Confluence Postmortem
  description: When a PagerDuty incident is resolved, generates a postmortem page in Confluence with incident timeline and notifies the SRE team.
  tags:
  - operations
  - documentation
  - pagerduty
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: postmortem
    port: 8080
    tools:
    - name: create-postmortem
      description: Given a PagerDuty incident ID, retrieve the timeline, create a Confluence postmortem page, and notify the team.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: PagerDuty incident ID.
      steps:
      - name: get-incident
        type: call
        call: pagerduty.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: SRE
          title: 'Postmortem: {{get-incident.title}} — {{get-incident.created_at}}'
          body: '## Incident Summary

            - **Title:** {{get-incident.title}}

            - **Severity:** {{get-incident.urgency}}

            - **Duration:** {{get-incident.duration}}


            ## Timeline

            {{get-incident.log_entries}}'
      - name: notify-sre
        type: call
        call: slack.post-message
        with:
          channel: '#sre-team'
          text: 'Postmortem created for incident {{incident_id}}: {{create-page.url}}'
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://ibm-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → pagerduty-incident-to-confluence-postmortem.yml

Runs SonarQube quality gate checks against a GitHub repository and posts the scan summary as a ServiceNow change advisory board note.

naftiko: '0.5'
info:
  label: GitHub Repository Security Scan Digest
  description: Runs SonarQube quality gate checks against a GitHub repository and posts the scan summary as a ServiceNow change advisory board note.
  tags:
  - devops
  - security
  - github
  - sonarqube
  - servicenow
  - code-quality
capability:
  exposes:
  - type: mcp
    namespace: devops-quality
    port: 8080
    tools:
    - name: digest-security-scan
      description: Given a GitHub repository name and SonarQube project key, retrieve the latest quality gate result and post a scan digest as a ServiceNow advisory note.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository name within the ibm org.
      - name: sonar_project_key
        in: body
        type: string
        description: SonarQube project key, e.g. ibm_my-service.
      steps:
      - name: get-quality-gate
        type: call
        call: sonarqube.get-quality-gate
        with:
          projectKey: '{{sonar_project_key}}'
      - name: get-repo-info
        type: call
        call: github-scan.get-repo
        with:
          owner: ibm
          repo: '{{repo}}'
      - name: post-advisory
        type: call
        call: servicenow-cab.create-advisory
        with:
          short_description: 'Code scan: {{repo}} — Gate: {{get-quality-gate.status}}'
          description: 'Bugs: {{get-quality-gate.bugs}} | Vulnerabilities: {{get-quality-gate.vulnerabilities}} | Coverage: {{get-quality-gate.coverage}}'
  consumes:
  - type: http
    namespace: sonarqube
    baseUri: https://sonarqube.ibm.internal/api
    authentication:
      type: basic
      username: $secrets.sonar_token
      password: ''
    resources:
    - name: quality-gate
      path: /qualitygates/project_status
      inputParameters:
      - name: projectKey
        in: query
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: github-scan
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/{{owner}}/{{repo}}
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: get-repo
        method: GET
  - type: http
    namespace: servicenow-cab
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: advisories
      path: /table/change_request
      operations:
      - name: create-advisory
        method: POST
Open in Framework → View in Fleet → github-repository-security-scan-digest.yml

When a Bitbucket pull request is merged to main, creates a ServiceNow change request for deployment tracking and attaches the PR diff summary.

naftiko: '0.5'
info:
  label: Bitbucket PR Code Review to ServiceNow Change
  description: When a Bitbucket pull request is merged to main, creates a ServiceNow change request for deployment tracking and attaches the PR diff summary.
  tags:
  - devops
  - cicd
  - bitbucket
  - servicenow
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: change-mgmt
    port: 8080
    tools:
    - name: create-deployment-change
      description: Given a Bitbucket workspace, repository slug, and pull request ID, fetch the PR details and create a ServiceNow standard change request for the merged code.
      inputParameters:
      - name: workspace
        in: body
        type: string
        description: Bitbucket workspace slug.
      - name: repo_slug
        in: body
        type: string
        description: Bitbucket repository slug.
      - name: pr_id
        in: body
        type: integer
        description: Bitbucket pull request ID.
      steps:
      - name: get-pr
        type: call
        call: bitbucket.get-pr
        with:
          workspace: '{{workspace}}'
          repo_slug: '{{repo_slug}}'
          pull_request_id: '{{pr_id}}'
      - name: create-change
        type: call
        call: servicenow-std.create-change
        with:
          short_description: 'Deploy: {{get-pr.title}} ({{repo_slug}} PR#{{pr_id}})'
          type: standard
          description: 'Author: {{get-pr.author.display_name}} | Merged: {{get-pr.updated_on}}'
  consumes:
  - type: http
    namespace: bitbucket
    baseUri: https://api.bitbucket.org/2.0
    authentication:
      type: bearer
      token: $secrets.bitbucket_token
    resources:
    - name: pull-requests
      path: /repositories/{{workspace}}/{{repo_slug}}/pullrequests/{{pull_request_id}}
      inputParameters:
      - name: workspace
        in: path
      - name: repo_slug
        in: path
      - name: pull_request_id
        in: path
      operations:
      - name: get-pr
        method: GET
  - type: http
    namespace: servicenow-std
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → bitbucket-pr-code-review-to-servicenow-change.yml

Retrieves the processing status of a vendor invoice from SAP S/4HANA. Used by finance teams and agents to check whether an invoice is pending, parked, or cleared.

naftiko: '0.5'
info:
  label: SAP S/4HANA Invoice Processing Status
  description: Retrieves the processing status of a vendor invoice from SAP S/4HANA. Used by finance teams and agents to check whether an invoice is pending, parked, or cleared.
  tags:
  - finance
  - erp
  - sap-s4hana
  - accounts-payable
capability:
  exposes:
  - type: mcp
    namespace: erp-ap
    port: 8080
    tools:
    - name: get-invoice-status
      description: Given a supplier invoice document number and fiscal year, return the posting status and clearing date from SAP S/4HANA.
      inputParameters:
      - name: invoice_doc
        in: body
        type: string
        description: SAP supplier invoice document number.
      - name: fiscal_year
        in: body
        type: string
        description: Four-digit fiscal year, e.g. 2025.
      call: sap-fi.get-invoice
      with:
        SupplierInvoice: '{{invoice_doc}}'
        FiscalYear: '{{fiscal_year}}'
      outputParameters:
      - name: posting_status
        type: string
        mapping: $.d.PostingStatus
      - name: clearing_date
        type: string
        mapping: $.d.ClearingDate
      - name: net_amount
        type: string
        mapping: $.d.InvoiceGrossAmount
  consumes:
  - type: http
    namespace: sap-fi
    baseUri: https://ibm-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(SupplierInvoice='{{SupplierInvoice}}',FiscalYear='{{FiscalYear}}')
      inputParameters:
      - name: SupplierInvoice
        in: path
      - name: FiscalYear
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-invoice-processing-status.yml

Retrieves a Microsoft Teams meeting transcript summary and publishes it as a Confluence page for team knowledge base.

naftiko: '0.5'
info:
  label: Microsoft Teams Meeting Summary to Confluence
  description: Retrieves a Microsoft Teams meeting transcript summary and publishes it as a Confluence page for team knowledge base.
  tags:
  - communication
  - documentation
  - microsoft-teams
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: meeting-notes
    port: 8080
    tools:
    - name: publish-meeting-notes
      description: Given a Teams meeting ID and Confluence space, retrieve the transcript and create a Confluence page.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: Microsoft Teams meeting ID.
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      steps:
      - name: get-transcript
        type: call
        call: teams.get-meeting-transcript
        with:
          meeting_id: '{{meeting_id}}'
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          title: 'Meeting Notes: {{get-transcript.subject}} — {{get-transcript.date}}'
          body: '## Attendees

            {{get-transcript.attendees}}


            ## Summary

            {{get-transcript.summary}}'
  consumes:
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.azure_graph_token
    resources:
    - name: meetings
      path: /me/onlineMeetings/{{meeting_id}}/transcripts
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-transcript
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://ibm-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → microsoft-teams-meeting-summary-to-confluence.yml

Retrieves the current status, owner, and priority of a Salesforce support case by case number.

naftiko: '0.5'
info:
  label: Salesforce Case Status Lookup
  description: Retrieves the current status, owner, and priority of a Salesforce support case by case number.
  tags:
  - crm
  - support
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: support
    port: 8080
    tools:
    - name: get-case-status
      description: Given a Salesforce case number, return the case status, owner, priority, and subject.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: Salesforce case number.
      call: salesforce.get-case
      with:
        case_number: '{{case_number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ibm.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /query?q=SELECT+Id,Status,Priority,Owner.Name,Subject+FROM+Case+WHERE+CaseNumber='{{case_number}}'
      inputParameters:
      - name: case_number
        in: query
      operations:
      - name: get-case
        method: GET
Open in Framework → View in Fleet → salesforce-case-status-lookup.yml

Pulls new LinkedIn recruiter candidates for a given job requisition and creates candidate records in PeopleSoft HCM for recruiter review.

naftiko: '0.5'
info:
  label: LinkedIn Talent Pipeline to PeopleSoft Candidate Record
  description: Pulls new LinkedIn recruiter candidates for a given job requisition and creates candidate records in PeopleSoft HCM for recruiter review.
  tags:
  - hr
  - recruiting
  - linkedin
  - peoplesoft
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: sync-linkedin-candidates
      description: Given a LinkedIn job posting ID and a PeopleSoft business unit, fetch newly applied candidates from LinkedIn Recruiter and create candidate profiles in PeopleSoft HCM.
      inputParameters:
      - name: linkedin_job_id
        in: body
        type: string
        description: LinkedIn job posting ID.
      - name: business_unit
        in: body
        type: string
        description: PeopleSoft HCM business unit code.
      steps:
      - name: get-candidates
        type: call
        call: linkedin.get-applicants
        with:
          jobId: '{{linkedin_job_id}}'
      - name: create-ps-candidates
        type: call
        call: peoplesoft.create-candidate
        with:
          business_unit: '{{business_unit}}'
          applicants: '{{get-candidates.applicants}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: applicants
      path: /jobApplications
      inputParameters:
      - name: jobId
        in: query
      operations:
      - name: get-applicants
        method: GET
  - type: http
    namespace: peoplesoft
    baseUri: https://ibm-ps.internal/hcm/api/v1
    authentication:
      type: basic
      username: $secrets.peoplesoft_user
      password: $secrets.peoplesoft_password
    resources:
    - name: candidates
      path: /candidates
      operations:
      - name: create-candidate
        method: POST
Open in Framework → View in Fleet → linkedin-talent-pipeline-to-peoplesoft-candidate-record.yml

Triggers a Power BI dataset refresh, waits for completion, and posts the report link to designated Slack channels for stakeholder distribution.

naftiko: '0.5'
info:
  label: Power BI Report Distribution via Slack
  description: Triggers a Power BI dataset refresh, waits for completion, and posts the report link to designated Slack channels for stakeholder distribution.
  tags:
  - analytics
  - reporting
  - power-bi
  - slack
capability:
  exposes:
  - type: mcp
    namespace: report-dist
    port: 8080
    tools:
    - name: distribute-report
      description: Given a Power BI dataset ID and report URL, trigger a refresh and distribute to Slack.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      - name: report_url
        in: body
        type: string
        description: Power BI report URL.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for distribution.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi.trigger-refresh
        with:
          dataset_id: '{{dataset_id}}'
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Weekly report refreshed and ready: {{report_url}}'
  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
  - 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 → power-bi-report-distribution-via-slack.yml

When Cloudflare rate limiting triggers for a zone, creates a PagerDuty incident and updates the Cloudflare WAF rule to block the source IP.

naftiko: '0.5'
info:
  label: Cloudflare Rate Limit Breach to PagerDuty
  description: When Cloudflare rate limiting triggers for a zone, creates a PagerDuty incident and updates the Cloudflare WAF rule to block the source IP.
  tags:
  - security
  - networking
  - cloudflare
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: waf-ops
    port: 8080
    tools:
    - name: handle-rate-limit-breach
      description: Given a Cloudflare zone and source IP, block the IP and create a PagerDuty incident.
      inputParameters:
      - name: zone_id
        in: body
        type: string
        description: Cloudflare zone ID.
      - name: source_ip
        in: body
        type: string
        description: Offending source IP address.
      steps:
      - name: block-ip
        type: call
        call: cloudflare.create-firewall-rule
        with:
          zone_id: '{{zone_id}}'
          mode: block
          ip: '{{source_ip}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          service_id: $secrets.pd_security_service_id
          title: 'Rate limit breach: {{source_ip}} blocked on zone {{zone_id}}'
          urgency: high
  consumes:
  - type: http
    namespace: cloudflare
    baseUri: https://api.cloudflare.com/client/v4
    authentication:
      type: bearer
      token: $secrets.cloudflare_token
    resources:
    - name: firewall-rules
      path: /zones/{{zone_id}}/firewall/access_rules/rules
      inputParameters:
      - name: zone_id
        in: path
      operations:
      - name: create-firewall-rule
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → cloudflare-rate-limit-breach-to-pagerduty.yml

On a GitLab merge request to a protected branch, runs a SonarQube quality gate check and blocks the MR with a comment if vulnerabilities exceed the allowed threshold.

naftiko: '0.5'
info:
  label: GitLab Merge Request Security Gate
  description: On a GitLab merge request to a protected branch, runs a SonarQube quality gate check and blocks the MR with a comment if vulnerabilities exceed the allowed threshold.
  tags:
  - devops
  - security
  - gitlab
  - sonarqube
  - code-quality
capability:
  exposes:
  - type: mcp
    namespace: mr-security-gate
    port: 8080
    tools:
    - name: gate-merge-request
      description: Given a GitLab project ID, MR IID, and SonarQube project key, run a quality gate check and post a blocking comment on the MR if critical vulnerabilities are found.
      inputParameters:
      - name: gitlab_project_id
        in: body
        type: string
        description: GitLab project ID (numeric).
      - name: mr_iid
        in: body
        type: string
        description: GitLab merge request internal ID.
      - name: sonar_project_key
        in: body
        type: string
        description: SonarQube project key to check.
      steps:
      - name: get-quality-gate
        type: call
        call: sonarqube-gate.get-quality-gate
        with:
          projectKey: '{{sonar_project_key}}'
      - name: post-mr-comment
        type: call
        call: gitlab.create-mr-note
        with:
          project_id: '{{gitlab_project_id}}'
          merge_request_iid: '{{mr_iid}}'
          body: 'Security Gate: {{get-quality-gate.status}} | Vulnerabilities: {{get-quality-gate.vulnerabilities}} | Blockers: {{get-quality-gate.blocker_violations}}'
  consumes:
  - type: http
    namespace: sonarqube-gate
    baseUri: https://sonarqube.ibm.internal/api
    authentication:
      type: basic
      username: $secrets.sonar_token
      password: ''
    resources:
    - name: quality-gate
      path: /qualitygates/project_status
      inputParameters:
      - name: projectKey
        in: query
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.ibm.com/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: mr-notes
      path: /projects/{{project_id}}/merge_requests/{{merge_request_iid}}/notes
      inputParameters:
      - name: project_id
        in: path
      - name: merge_request_iid
        in: path
      operations:
      - name: create-mr-note
        method: POST
Open in Framework → View in Fleet → gitlab-merge-request-security-gate.yml

Compiles completed Jira issues for a release version, generates a Confluence release notes page, and notifies stakeholders via Slack.

naftiko: '0.5'
info:
  label: Jira Release Notes to Confluence
  description: Compiles completed Jira issues for a release version, generates a Confluence release notes page, and notifies stakeholders via Slack.
  tags:
  - devops
  - documentation
  - jira
  - confluence
  - slack
capability:
  exposes:
  - type: mcp
    namespace: release-mgmt
    port: 8080
    tools:
    - name: generate-release-notes
      description: Given a Jira project and fix version, compile issues and create a Confluence release notes page.
      inputParameters:
      - name: project
        in: body
        type: string
        description: Jira project key.
      - name: fix_version
        in: body
        type: string
        description: Jira fix version name.
      steps:
      - name: get-issues
        type: call
        call: jira.search-issues
        with:
          jql: project={{project}} AND fixVersion='{{fix_version}}' AND status=Done
      - name: create-release-page
        type: call
        call: confluence.create-page
        with:
          space_key: RELEASES
          title: 'Release Notes: {{project}} {{fix_version}}'
          body: '## Release {{fix_version}}


            ### Issues Completed

            {{get-issues.summary_list}}'
      - name: notify-stakeholders
        type: call
        call: slack.post-message
        with:
          channel: '#releases'
          text: 'Release notes published for {{project}} {{fix_version}}: {{create-release-page.url}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://ibm-jira.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
  - type: http
    namespace: confluence
    baseUri: https://ibm-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-release-notes-to-confluence.yml

When an employee termination is recorded in PeopleSoft, opens a ServiceNow offboarding task, revokes Salesforce access, and creates a GitHub access removal issue.

naftiko: '0.5'
info:
  label: PeopleSoft Employee Termination and ServiceNow Offboarding
  description: When an employee termination is recorded in PeopleSoft, opens a ServiceNow offboarding task, revokes Salesforce access, and creates a GitHub access removal issue.
  tags:
  - hr
  - offboarding
  - peoplesoft
  - servicenow
  - salesforce
  - github
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a PeopleSoft employee ID and termination date, open a ServiceNow offboarding task, remove the employee from Salesforce user list, and file a GitHub issue to revoke repo access.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: PeopleSoft employee ID.
      - name: termination_date
        in: body
        type: string
        description: Effective termination date in YYYY-MM-DD format.
      - name: employee_email
        in: body
        type: string
        description: Corporate email address of the departing employee.
      steps:
      - name: open-offboard-task
        type: call
        call: servicenow-task.create-task
        with:
          short_description: 'Offboarding: {{employee_id}} effective {{termination_date}}'
          category: hr_offboarding
          assignment_group: IT_Security
      - name: deactivate-sf-user
        type: call
        call: salesforce-user.deactivate-user
        with:
          email: '{{employee_email}}'
      - name: file-github-issue
        type: call
        call: github-offboard.create-issue
        with:
          owner: ibm
          repo: access-management
          title: 'Revoke access: {{employee_email}} (terminated {{termination_date}})'
          body: Employee {{employee_id}} has been terminated. Please revoke all repository access.
  consumes:
  - type: http
    namespace: servicenow-task
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: salesforce-user
    baseUri: https://ibm.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: users
      path: /sobjects/User
      operations:
      - name: deactivate-user
        method: PATCH
  - type: http
    namespace: github-offboard
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/{{owner}}/{{repo}}/issues
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → peoplesoft-employee-termination-and-servicenow-offboarding.yml

When a Jira epic is completed, updates the corresponding Salesforce opportunity stage and notifies the account team.

naftiko: '0.5'
info:
  label: Jira Epic Completion to Salesforce Update
  description: When a Jira epic is completed, updates the corresponding Salesforce opportunity stage and notifies the account team.
  tags:
  - devops
  - crm
  - jira
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: delivery-crm
    port: 8080
    tools:
    - name: sync-epic-completion
      description: Given a Jira epic key and Salesforce opportunity ID, update the opportunity delivery status and notify the team.
      inputParameters:
      - name: epic_key
        in: body
        type: string
        description: Jira epic key.
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: get-epic
        type: call
        call: jira.get-issue
        with:
          issue_key: '{{epic_key}}'
      - name: update-opportunity
        type: call
        call: salesforce.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          StageName: Delivered
          Description: 'Epic {{epic_key}} completed: {{get-epic.fields.summary}}'
      - name: notify-account
        type: call
        call: slack.post-message
        with:
          channel: '#account-team'
          text: Epic {{epic_key}} delivered — Salesforce opportunity {{opportunity_id}} updated to Delivered
  consumes:
  - type: http
    namespace: jira
    baseUri: https://ibm-jira.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://ibm.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
  - 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 → jira-epic-completion-to-salesforce-update.yml

Retrieves high-scoring leads from HubSpot and creates corresponding Salesforce lead records with owner assignment and Slack notification.

naftiko: '0.5'
info:
  label: HubSpot Lead Scoring to Salesforce Assignment
  description: Retrieves high-scoring leads from HubSpot and creates corresponding Salesforce lead records with owner assignment and Slack notification.
  tags:
  - crm
  - marketing
  - hubspot
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: lead-ops
    port: 8080
    tools:
    - name: route-high-score-leads
      description: Given a HubSpot lead score threshold, retrieve qualifying leads and create Salesforce records with routing.
      inputParameters:
      - name: score_threshold
        in: body
        type: number
        description: Minimum lead score to qualify.
      steps:
      - name: get-leads
        type: call
        call: hubspot.search-contacts
        with:
          min_score: '{{score_threshold}}'
      - name: create-sf-lead
        type: call
        call: salesforce.create-lead
        with:
          FirstName: '{{get-leads.results[0].properties.firstname}}'
          LastName: '{{get-leads.results[0].properties.lastname}}'
          Company: '{{get-leads.results[0].properties.company}}'
          Email: '{{get-leads.results[0].properties.email}}'
      - name: notify-sales
        type: call
        call: slack.post-message
        with:
          channel: '#sales-leads'
          text: 'High-score lead routed to Salesforce: {{get-leads.results[0].properties.firstname}} {{get-leads.results[0].properties.lastname}} (Score: {{get-leads.results[0].properties.hubspotscore}})'
  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
  - type: http
    namespace: salesforce
    baseUri: https://ibm.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: create-lead
        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 → hubspot-lead-scoring-to-salesforce-assignment.yml

When a GitHub Actions workflow run fails tests, retrieves the failure logs and posts a summary to the engineering Slack channel.

naftiko: '0.5'
info:
  label: GitHub Actions Test Failure to Slack
  description: When a GitHub Actions workflow run fails tests, retrieves the failure logs and posts a summary to the engineering Slack channel.
  tags:
  - devops
  - ci-cd
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ci-notify
    port: 8080
    tools:
    - name: notify-test-failure
      description: Given a GitHub repository and workflow run ID, retrieve the failure details and notify Slack.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: run_id
        in: body
        type: string
        description: GitHub Actions workflow run ID.
      steps:
      - name: get-run
        type: call
        call: github.get-workflow-run
        with:
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: notify-channel
        type: call
        call: slack.post-message
        with:
          channel: '#ci-cd'
          text: 'Test failure in {{repo}}: {{get-run.name}} — Branch: {{get-run.head_branch}} | Commit: {{get-run.head_sha}} | Author: {{get-run.actor.login}}'
  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: 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-test-failure-to-slack.yml

Retrieves the fulfillment status of a SAP SD sales order by order number and updates the corresponding Salesforce opportunity with the latest delivery status.

naftiko: '0.5'
info:
  label: SAP Sales and Distribution Order Status Check
  description: Retrieves the fulfillment status of a SAP SD sales order by order number and updates the corresponding Salesforce opportunity with the latest delivery status.
  tags:
  - sales
  - erp
  - sap-s4hana
  - salesforce
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: order-mgmt
    port: 8080
    tools:
    - name: sync-sd-order-status
      description: Given a SAP SD order number and a Salesforce opportunity ID, retrieve the delivery status from SAP S/4HANA SD and update the opportunity with fulfilment details.
      inputParameters:
      - name: sd_order_number
        in: body
        type: string
        description: SAP SD sales order number.
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID to update.
      steps:
      - name: get-sd-order
        type: call
        call: sap-sd.get-order
        with:
          order_number: '{{sd_order_number}}'
      - name: update-opportunity
        type: call
        call: salesforce-opp.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          delivery_status: '{{get-sd-order.OverallSDProcessStatus}}'
          requested_delivery: '{{get-sd-order.RequestedDeliveryDate}}'
  consumes:
  - type: http
    namespace: sap-sd
    baseUri: https://ibm-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: orders
      path: /A_SalesOrder('{{order_number}}')
      inputParameters:
      - name: order_number
        in: path
      operations:
      - name: get-order
        method: GET
  - type: http
    namespace: salesforce-opp
    baseUri: https://ibm.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 → sap-sales-and-distribution-order-status-check.yml

When a Datadog monitor triggers a critical alert, creates a PagerDuty incident and posts a summary to the Slack on-call channel.

naftiko: '0.5'
info:
  label: Datadog Alert to PagerDuty Incident
  description: When a Datadog monitor triggers a critical alert, creates a PagerDuty incident and posts a summary to the Slack on-call channel.
  tags:
  - observability
  - incident-response
  - datadog
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: incident-ops
    port: 8080
    tools:
    - name: escalate-datadog-alert
      description: Given a Datadog monitor ID, check the monitor status and if critical, create a PagerDuty incident and notify Slack.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID.
      - name: service_id
        in: body
        type: string
        description: PagerDuty service ID for routing.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-pd-incident
        type: call
        call: pagerduty.create-incident
        with:
          service_id: '{{service_id}}'
          title: 'Datadog Critical: {{get-monitor.name}}'
          urgency: high
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '#oncall-alerts'
          text: PagerDuty incident {{create-pd-incident.incident.id}} created for Datadog monitor {{get-monitor.name}}
  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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: Token token=$secrets.pagerduty_token
      placement: header
    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 → datadog-alert-to-pagerduty-incident.yml

When SAP Concur flags an expense policy violation, creates a ServiceNow compliance task and notifies the finance team via Slack.

naftiko: '0.5'
info:
  label: SAP Concur Expense Violation to ServiceNow
  description: When SAP Concur flags an expense policy violation, creates a ServiceNow compliance task and notifies the finance team via Slack.
  tags:
  - finance
  - compliance
  - sap-concur
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: expense-compliance
    port: 8080
    tools:
    - name: handle-expense-violation
      description: Given a Concur expense report ID with violations, create a ServiceNow compliance task and notify finance.
      inputParameters:
      - name: report_id
        in: body
        type: string
        description: SAP Concur expense report ID.
      steps:
      - name: get-report
        type: call
        call: concur.get-expense-report
        with:
          report_id: '{{report_id}}'
      - name: create-compliance-task
        type: call
        call: servicenow-comp.create-task
        with:
          short_description: 'Expense violation: Report {{report_id}} — {{get-report.OwnerName}}'
          description: 'Total: {{get-report.Total}} | Violations: {{get-report.PolicyViolations}}'
          assignment_group: Finance_Compliance
      - name: notify-finance
        type: call
        call: slack.post-message
        with:
          channel: '#finance-compliance'
          text: 'Expense policy violation flagged for {{get-report.OwnerName}} — ServiceNow: {{create-compliance-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-expense-report
        method: GET
  - type: http
    namespace: servicenow-comp
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → sap-concur-expense-violation-to-servicenow.yml

When GitHub Dependabot finds a critical vulnerability, creates a Jira security task and notifies the AppSec team via Slack.

naftiko: '0.5'
info:
  label: GitHub Dependabot Alert to Jira Security Task
  description: When GitHub Dependabot finds a critical vulnerability, creates a Jira security task and notifies the AppSec team via Slack.
  tags:
  - security
  - devops
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: appsec
    port: 8080
    tools:
    - name: handle-dependabot-alert
      description: Given a GitHub repository and alert number, retrieve vulnerability details, create a Jira security task, and notify AppSec.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: alert_number
        in: body
        type: string
        description: Dependabot alert number.
      steps:
      - name: get-alert
        type: call
        call: github.get-dependabot-alert
        with:
          repo: '{{repo}}'
          alert_number: '{{alert_number}}'
      - name: create-sec-task
        type: call
        call: jira.create-issue
        with:
          project: SEC
          issuetype: Task
          summary: 'Dependabot: {{get-alert.security_advisory.summary}} in {{repo}}'
          priority: Critical
          description: 'CVE: {{get-alert.security_advisory.cve_id}} | Severity: {{get-alert.security_advisory.severity}} | Package: {{get-alert.dependency.package.name}}'
      - name: notify-appsec
        type: call
        call: slack.post-message
        with:
          channel: '#appsec'
          text: 'Critical vulnerability in {{repo}}: {{get-alert.security_advisory.summary}} — Jira: {{create-sec-task.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/{{alert_number}}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-dependabot-alert
        method: GET
  - type: http
    namespace: jira
    baseUri: https://ibm-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-dependabot-alert-to-jira-security-task.yml

Lists IAM-granted access to IBM S3 buckets and flags any public or cross-account permissions. Creates a ServiceNow security task for each non-compliant bucket found.

naftiko: '0.5'
info:
  label: Amazon S3 Data Lake Access Review
  description: Lists IAM-granted access to IBM S3 buckets and flags any public or cross-account permissions. Creates a ServiceNow security task for each non-compliant bucket found.
  tags:
  - cloud
  - security
  - aws
  - servicenow
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: s3-access-review
    port: 8080
    tools:
    - name: review-s3-access
      description: Given an AWS account ID, enumerate S3 bucket policies and ACLs for public or cross-account access. Create a ServiceNow security task for each non-compliant bucket.
      inputParameters:
      - name: aws_account_id
        in: body
        type: string
        description: AWS account ID to review.
      steps:
      - name: list-buckets
        type: call
        call: aws-s3.list-buckets
        with:
          account_id: '{{aws_account_id}}'
      - name: create-security-task
        type: call
        call: servicenow-s3.create-task
        with:
          short_description: 'S3 access review: {{aws_account_id}} — non-compliant buckets found'
          description: 'Non-compliant buckets: {{list-buckets.non_compliant_count}}'
          assignment_group: Cloud_Security
  consumes:
  - type: http
    namespace: aws-s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: buckets
      path: /
      operations:
      - name: list-buckets
        method: GET
  - type: http
    namespace: servicenow-s3
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → amazon-s3-data-lake-access-review.yml

When a Salesforce opportunity moves to Closed-Won, creates a Jira project for delivery and posts the kickoff notification to Slack.

naftiko: '0.5'
info:
  label: Salesforce Closed-Won to Jira Project
  description: When a Salesforce opportunity moves to Closed-Won, creates a Jira project for delivery and posts the kickoff notification to Slack.
  tags:
  - crm
  - devops
  - salesforce
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: deal-handoff
    port: 8080
    tools:
    - name: handle-closed-won
      description: Given a Salesforce opportunity ID, retrieve deal details, create a Jira project, and notify the delivery team via Slack.
      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-jira-project
        type: call
        call: jira.create-project
        with:
          name: '{{get-opportunity.Name}}'
          key: '{{get-opportunity.ProjectKey}}'
          projectTypeKey: software
      - name: notify-delivery
        type: call
        call: slack.post-message
        with:
          channel: '#delivery-team'
          text: 'New project created: {{get-opportunity.Name}} | Jira: {{create-jira-project.key}} | Value: {{get-opportunity.Amount}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ibm.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: get-opportunity
        method: GET
  - type: http
    namespace: jira
    baseUri: https://ibm-jira.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: projects
      path: /project
      operations:
      - name: create-project
        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 → salesforce-closed-won-to-jira-project.yml

Identifies at-risk Salesforce renewal opportunities and enrolls the account contacts into a HubSpot retention campaign.

naftiko: '0.5'
info:
  label: Salesforce Renewal Risk to HubSpot Campaign
  description: Identifies at-risk Salesforce renewal opportunities and enrolls the account contacts into a HubSpot retention campaign.
  tags:
  - crm
  - marketing
  - salesforce
  - hubspot
capability:
  exposes:
  - type: mcp
    namespace: retention
    port: 8080
    tools:
    - name: handle-renewal-risk
      description: Given a Salesforce opportunity ID flagged as at-risk, retrieve account contacts and enroll them in a HubSpot retention campaign.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      - name: campaign_id
        in: body
        type: string
        description: HubSpot campaign ID for retention.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: enroll-contact
        type: call
        call: hubspot.add-to-campaign
        with:
          email: '{{get-opportunity.Contact.Email}}'
          campaign_id: '{{campaign_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://ibm.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: get-opportunity
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaigns
      path: /email/public/v1/campaigns/{{campaign_id}}/contacts
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: add-to-campaign
        method: POST
Open in Framework → View in Fleet → salesforce-renewal-risk-to-hubspot-campaign.yml

Monitors Datadog SLO burn rate and, when a threshold is breached, automatically opens a P1 ServiceNow incident and notifies New Relic with a deployment marker.

naftiko: '0.5'
info:
  label: Datadog SLO Breach to ServiceNow Incident
  description: Monitors Datadog SLO burn rate and, when a threshold is breached, automatically opens a P1 ServiceNow incident and notifies New Relic with a deployment marker.
  tags:
  - observability
  - itsm
  - datadog
  - new-relic
  - servicenow
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: slo-ops
    port: 8080
    tools:
    - name: handle-slo-breach
      description: Given a Datadog SLO ID and service name, check the current error budget burn rate and open a P1 ServiceNow incident if the burn rate exceeds the threshold.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: Datadog SLO identifier.
      - name: service_name
        in: body
        type: string
        description: Name of the service associated with the SLO.
      - name: burn_rate_threshold
        in: body
        type: number
        description: Burn rate value above which to open an incident.
      steps:
      - name: get-slo
        type: call
        call: datadog-slo.get-slo-history
        with:
          slo_id: '{{slo_id}}'
      - name: open-incident
        type: call
        call: servicenow-p1.create-incident
        with:
          short_description: 'SLO breach: {{service_name}} burn rate exceeded {{burn_rate_threshold}}'
          urgency: '1'
          impact: '1'
          assignment_group: Platform_SRE
      - name: mark-deployment
        type: call
        call: newrelic.create-deployment
        with:
          entity_name: '{{service_name}}'
          description: SLO breach event — incident {{open-incident.number}}
  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: slo-history
      path: /slo/{{slo_id}}/history
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo-history
        method: GET
  - type: http
    namespace: servicenow-p1
    baseUri: https://ibm.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: 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/deployments.json
      operations:
      - name: create-deployment
        method: POST
Open in Framework → View in Fleet → datadog-slo-breach-to-servicenow-incident.yml

When a new developer hire is detected in Workday, invites them to the GitHub organization and creates an Okta application assignment.

naftiko: '0.5'
info:
  label: Workday New Hire to GitHub Org Invite
  description: When a new developer hire is detected in Workday, invites them to the GitHub organization and creates an Okta application assignment.
  tags:
  - hr
  - devops
  - workday
  - github
  - okta
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: dev-onboarding
    port: 8080
    tools:
    - name: onboard-developer
      description: Given a Workday worker ID, retrieve the new hire details, invite them to the GitHub org, and assign Okta developer apps.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID of the new hire.
      steps:
      - name: get-new-hire
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: invite-to-github
        type: call
        call: github.create-org-invitation
        with:
          email: '{{get-new-hire.email}}'
          role: member
      - name: assign-okta-apps
        type: call
        call: okta.assign-app
        with:
          user_id: '{{get-new-hire.email}}'
          app_id: $secrets.okta_github_app_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: /ibm/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-invitations
      path: /orgs/ibm/invitations
      operations:
      - name: create-org-invitation
        method: POST
  - type: http
    namespace: okta
    baseUri: https://ibm.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: SSWS $secrets.okta_api_token
      placement: header
    resources:
    - name: app-users
      path: /apps/{{app_id}}/users
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: assign-app
        method: POST
Open in Framework → View in Fleet → workday-new-hire-to-github-org-invite.yml

Extracts accounts payable invoice data from Oracle E-Business Suite and loads it into Snowflake for finance analytics.

naftiko: '0.5'
info:
  label: Oracle EBS AP Invoice to Snowflake Sync
  description: Extracts accounts payable invoice data from Oracle E-Business Suite and loads it into Snowflake for finance analytics.
  tags:
  - finance
  - data
  - oracle
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: finance-etl
    port: 8080
    tools:
    - name: sync-ap-invoices
      description: Given a date range, extract AP invoices from Oracle EBS and load them into the Snowflake finance schema.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date for invoice extraction.
      - name: end_date
        in: body
        type: string
        description: End date for invoice extraction.
      steps:
      - name: get-invoices
        type: call
        call: oracle-ebs.get-ap-invoices
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-query
        with:
          statement: INSERT INTO FINANCE.AP_INVOICES SELECT * FROM TABLE(RESULT_SCAN('{{get-invoices.query_id}}'))
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://oracle-ebs.ibm.com/webservices/rest
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: ap-invoices
      path: /ap/invoices
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-ap-invoices
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://ibm.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 → oracle-ebs-ap-invoice-to-snowflake-sync.yml

When a Workday employee changes roles, updates their Okta group memberships to match the new department and creates a ServiceNow audit record.

naftiko: '0.5'
info:
  label: Workday Role Change to Okta Group Sync
  description: When a Workday employee changes roles, updates their Okta group memberships to match the new department and creates a ServiceNow audit record.
  tags:
  - hr
  - security
  - workday
  - okta
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: role-sync
    port: 8080
    tools:
    - name: sync-role-groups
      description: Given a worker ID and new department, update Okta group memberships and log the change in ServiceNow.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      - name: new_department
        in: body
        type: string
        description: New department name.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: update-groups
        type: call
        call: okta.update-groups
        with:
          user_id: '{{get-worker.email}}'
          group_name: '{{new_department}}'
      - name: create-audit
        type: call
        call: servicenow-audit.create-record
        with:
          short_description: 'Role change: {{get-worker.full_name}} moved to {{new_department}}'
          category: access_management
  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: /ibm/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://ibm.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: SSWS $secrets.okta_api_token
      placement: header
    resources:
    - name: groups
      path: /groups
      operations:
      - name: update-groups
        method: PUT
  - type: http
    namespace: servicenow-audit
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: records
      path: /table/sys_audit
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → workday-role-change-to-okta-group-sync.yml

Retrieves a Confluence page by title and space key, returning the page content body, last modified date, and author.

naftiko: '0.5'
info:
  label: Confluence Page Lookup
  description: Retrieves a Confluence page by title and space key, returning the page content body, last modified date, and author.
  tags:
  - knowledge
  - confluence
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: knowledge
    port: 8080
    tools:
    - name: get-confluence-page
      description: Given a space key and page title, return the Confluence page content, author, and last update timestamp.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: Confluence space key.
      - name: page_title
        in: body
        type: string
        description: Page title to search for.
      call: confluence.get-page
      with:
        spaceKey: '{{space_key}}'
        title: '{{page_title}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://ibm-wiki.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: content
      path: /content
      inputParameters:
      - name: spaceKey
        in: query
      - name: title
        in: query
      operations:
      - name: get-page
        method: GET
Open in Framework → View in Fleet → confluence-page-lookup.yml

Lists recently provisioned GCP resources in a project and creates a ServiceNow change record for each untracked resource detected during daily audit.

naftiko: '0.5'
info:
  label: Google Cloud Platform Resource Provisioning Audit
  description: Lists recently provisioned GCP resources in a project and creates a ServiceNow change record for each untracked resource detected during daily audit.
  tags:
  - cloud
  - gcp
  - servicenow
  - governance
  - audit
capability:
  exposes:
  - type: mcp
    namespace: cloud-audit
    port: 8080
    tools:
    - name: audit-gcp-resources
      description: Given a GCP project ID, list all compute and storage resources created in the last 24 hours and open ServiceNow change records for any resources not already tracked.
      inputParameters:
      - name: gcp_project_id
        in: body
        type: string
        description: Google Cloud Platform project ID.
      steps:
      - name: list-resources
        type: call
        call: gcp.list-assets
        with:
          projectId: '{{gcp_project_id}}'
          assetTypes: compute.googleapis.com/Instance,storage.googleapis.com/Bucket
      - name: create-change-record
        type: call
        call: servicenow-audit.create-change
        with:
          short_description: 'GCP resource audit: {{gcp_project_id}}'
          description: 'New resources detected: {{list-resources.asset_count}}'
  consumes:
  - type: http
    namespace: gcp
    baseUri: https://cloudasset.googleapis.com/v1
    authentication:
      type: bearer
      token: $secrets.gcp_token
    resources:
    - name: assets
      path: /projects/{{projectId}}/assets
      inputParameters:
      - name: projectId
        in: path
      - name: assetTypes
        in: query
      operations:
      - name: list-assets
        method: GET
  - type: http
    namespace: servicenow-audit
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
Open in Framework → View in Fleet → google-cloud-platform-resource-provisioning-audit.yml

When a ServiceNow change request is approved, triggers the Terraform Cloud run to apply and updates the change ticket with results.

naftiko: '0.5'
info:
  label: ServiceNow Change Approval to Terraform Apply
  description: When a ServiceNow change request is approved, triggers the Terraform Cloud run to apply and updates the change ticket with results.
  tags:
  - itsm
  - infrastructure
  - servicenow
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: change-deploy
    port: 8080
    tools:
    - name: apply-approved-change
      description: Given a ServiceNow change number and Terraform run ID, confirm the run and update the change record.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: ServiceNow change request number.
      - name: run_id
        in: body
        type: string
        description: Terraform Cloud run ID to apply.
      steps:
      - name: apply-run
        type: call
        call: terraform.apply-run
        with:
          run_id: '{{run_id}}'
      - name: update-change
        type: call
        call: servicenow-chg.update-change
        with:
          number: '{{change_number}}'
          work_notes: Terraform run {{run_id}} applied successfully
          state: implement
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs/{{run_id}}/actions/apply
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: apply-run
        method: POST
  - type: http
    namespace: servicenow-chg
    baseUri: https://ibm.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: changes
      path: /table/change_request
      operations:
      - name: update-change
        method: PATCH
Open in Framework → View in Fleet → servicenow-change-approval-to-terraform-apply.yml

Retrieves general ledger journal entry details from Oracle E-Business Suite for a given period and ledger. Used by finance agents during period-close reconciliation.

naftiko: '0.5'
info:
  label: Oracle E-Business Suite GL Journal Lookup
  description: Retrieves general ledger journal entry details from Oracle E-Business Suite for a given period and ledger. Used by finance agents during period-close reconciliation.
  tags:
  - finance
  - erp
  - oracle-ebs
  - general-ledger
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: gl-finance
    port: 8080
    tools:
    - name: get-gl-journal
      description: Given a ledger ID and accounting period name, retrieve unposted journal entries from Oracle EBS for review and approval.
      inputParameters:
      - name: ledger_id
        in: body
        type: string
        description: Oracle EBS ledger ID.
      - name: period_name
        in: body
        type: string
        description: Accounting period name, e.g. JAN-2025.
      call: oracle-ebs.get-journals
      with:
        ledger_id: '{{ledger_id}}'
        period_name: '{{period_name}}'
      outputParameters:
      - name: journal_count
        type: string
        mapping: $.count
      - name: total_debit
        type: string
        mapping: $.totalDebit
      - name: total_credit
        type: string
        mapping: $.totalCredit
  consumes:
  - type: http
    namespace: oracle-ebs
    baseUri: https://ibm-ebs.oracle.com/webservices/portal
    authentication:
      type: basic
      username: $secrets.oracle_ebs_user
      password: $secrets.oracle_ebs_password
    resources:
    - name: journals
      path: /GlJournalLookupService/getJournals
      inputParameters:
      - name: ledger_id
        in: query
      - name: period_name
        in: query
      operations:
      - name: get-journals
        method: GET
Open in Framework → View in Fleet → oracle-e-business-suite-gl-journal-lookup.yml

Retrieves merge request status from GitLab for Intuit engineering repositories, returning title, state, approvals, and pipeline status.

naftiko: '0.5'
info:
  label: GitLab Merge Request Status
  description: Retrieves merge request status from GitLab for Intuit engineering repositories, returning title, state, approvals, and pipeline status.
  tags:
  - development
  - gitlab
capability:
  exposes:
  - type: mcp
    namespace: code-review
    port: 8080
    tools:
    - name: get-mr-status
      description: Look up a GitLab merge request status.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GitLab project ID.
      - name: mr_iid
        in: body
        type: string
        description: The merge request internal ID.
      call: gitlab.get-mr
      with:
        project_id: '{{project_id}}'
        mr_iid: '{{mr_iid}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.title
      - name: state
        type: string
        mapping: $.state
      - name: approvals
        type: number
        mapping: $.approvals_before_merge
      - name: pipeline_status
        type: string
        mapping: $.head_pipeline.status
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.intuit.com/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: merge-requests
      path: /projects/{{project_id}}/merge_requests/{{mr_iid}}
      inputParameters:
      - name: project_id
        in: path
      - name: mr_iid
        in: path
      operations:
      - name: get-mr
        method: GET
Open in Framework → View in Fleet → gitlab-merge-request-status.yml

Queries Consul for a registered service's healthy instances, returning instance IPs, ports, and health check status for service mesh routing.

naftiko: '0.5'
info:
  label: Consul Service Discovery Lookup
  description: Queries Consul for a registered service's healthy instances, returning instance IPs, ports, and health check status for service mesh routing.
  tags:
  - platform
  - consul
  - service-mesh
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: service-discovery
    port: 8080
    tools:
    - name: discover-service
      description: Given a Consul service name, return healthy instances with their addresses and ports.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Consul-registered service name.
      call: consul.get-health
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: instances
        type: string
        mapping: $.nodes
      - name: healthy_count
        type: string
        mapping: $.healthy_count
  consumes:
  - type: http
    namespace: consul
    baseUri: https://consul.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.consul_token
    resources:
    - name: health
      path: /health/service/{{service_name}}
      inputParameters:
      - name: service_name
        in: path
      - name: passing
        in: query
        value: 'true'
      operations:
      - name: get-health
        method: GET
Open in Framework → View in Fleet → consul-service-discovery-lookup.yml

Retrieves accounts receivable aging report from QuickBooks Online, returning current, 30-day, 60-day, and 90-day aging buckets.

naftiko: '0.5'
info:
  label: QuickBooks Account Receivable Aging
  description: Retrieves accounts receivable aging report from QuickBooks Online, returning current, 30-day, 60-day, and 90-day aging buckets.
  tags:
  - accounting
  - quickbooks
  - receivables
capability:
  exposes:
  - type: mcp
    namespace: qbo-receivables
    port: 8080
    tools:
    - name: get-ar-aging
      description: Retrieve AR aging report from QuickBooks Online.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks company realm ID.
      call: qbo.get-ar-aging
      with:
        realm_id: '{{realm_id}}'
      outputParameters:
      - name: current
        type: string
        mapping: $.Rows.Row[0].ColData[1].value
      - name: days_30
        type: string
        mapping: $.Rows.Row[0].ColData[2].value
      - name: days_60
        type: string
        mapping: $.Rows.Row[0].ColData[3].value
      - name: days_90_plus
        type: string
        mapping: $.Rows.Row[0].ColData[4].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/AgedReceivables
      operations:
      - name: get-ar-aging
        method: GET
Open in Framework → View in Fleet → quickbooks-account-receivable-aging.yml

Pulls profit and loss reports from multiple QuickBooks Online companies, aggregates the financials, and uploads a consolidated report to Google Drive for the parent entity.

naftiko: '0.5'
info:
  label: QuickBooks Multi-Entity Consolidation
  description: Pulls profit and loss reports from multiple QuickBooks Online companies, aggregates the financials, and uploads a consolidated report to Google Drive for the parent entity.
  tags:
  - accounting
  - quickbooks
  - google-drive
  - financial-reporting
  - multi-entity
capability:
  exposes:
  - type: mcp
    namespace: entity-consolidation
    port: 8080
    tools:
    - name: consolidate-financials
      description: Given multiple QuickBooks realm IDs and a date range, pull P&L from each, aggregate, and upload to Google Drive.
      inputParameters:
      - name: realm_ids
        in: body
        type: string
        description: Comma-separated list of QuickBooks company realm IDs.
      - name: start_date
        in: body
        type: string
        description: Consolidation period start date.
      - name: end_date
        in: body
        type: string
        description: Consolidation period end date.
      - name: drive_folder_id
        in: body
        type: string
        description: Google Drive folder for the consolidated report.
      steps:
      - name: get-entity-reports
        type: call
        call: qbo.get-profit-loss
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: consolidate
        type: call
        call: intuit-ai.consolidate-reports
        with:
          reports: '{{get-entity-reports.results}}'
          realm_ids: '{{realm_ids}}'
      - name: upload-report
        type: call
        call: gdrive.upload-file
        with:
          folder_id: '{{drive_folder_id}}'
          file_name: Consolidated_PnL_{{start_date}}_{{end_date}}.pdf
          content: '{{consolidate.consolidated_report}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/ProfitAndLoss
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-profit-loss
        method: GET
  - type: http
    namespace: intuit-ai
    baseUri: https://ai.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.intuit_ai_token
    resources:
    - name: consolidation
      path: /finance/consolidate
      operations:
      - name: consolidate-reports
        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
      inputParameters:
      - name: uploadType
        in: query
        value: multipart
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → quickbooks-multi-entity-consolidation.yml

Generates QuickBooks profit and loss and balance sheet reports, exports them to Google Drive, and notifies the finance team in Microsoft Teams with download links.

naftiko: '0.5'
info:
  label: Quarterly Financial Close Orchestrator
  description: Generates QuickBooks profit and loss and balance sheet reports, exports them to Google Drive, and notifies the finance team in Microsoft Teams with download links.
  tags:
  - accounting
  - quickbooks
  - google-drive
  - microsoft-teams
  - financial-reporting
capability:
  exposes:
  - type: mcp
    namespace: financial-close
    port: 8080
    tools:
    - name: run-quarterly-close
      description: Given a fiscal quarter date range, generate P&L and balance sheet from QuickBooks, upload to Google Drive, and notify the finance team.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Quarter start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Quarter end date in YYYY-MM-DD format.
      - name: drive_folder_id
        in: body
        type: string
        description: The Google Drive folder ID for financial reports.
      - name: teams_channel_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook for the finance channel.
      steps:
      - name: get-pnl
        type: call
        call: qbo.get-profit-loss
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: get-balance-sheet
        type: call
        call: qbo.get-balance-sheet
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: upload-to-drive
        type: call
        call: gdrive.upload-file
        with:
          folder_id: '{{drive_folder_id}}'
          file_name: Q_Close_{{start_date}}_{{end_date}}.pdf
          content: '{{get-pnl.report_data}}'
      - name: notify-finance
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_channel_webhook}}'
          text: 'Quarterly close reports ready ({{start_date}} to {{end_date}}). P&L net income: {{get-pnl.net_income}}. Balance sheet total assets: {{get-balance-sheet.total_assets}}. Download: {{upload-to-drive.webViewLink}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: profit-loss
      path: /reports/ProfitAndLoss
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-profit-loss
        method: GET
    - name: balance-sheet
      path: /reports/BalanceSheet
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-balance-sheet
        method: GET
  - 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
      inputParameters:
      - name: uploadType
        in: query
        value: 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: webhooks
      path: /teams/webhook
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → quarterly-financial-close-orchestrator.yml

Retrieves inventory valuation summary from QuickBooks Online, returning total inventory value, item count, and COGS for inventory-based businesses.

naftiko: '0.5'
info:
  label: QuickBooks Inventory Valuation
  description: Retrieves inventory valuation summary from QuickBooks Online, returning total inventory value, item count, and COGS for inventory-based businesses.
  tags:
  - accounting
  - quickbooks
  - inventory
capability:
  exposes:
  - type: mcp
    namespace: qbo-inventory
    port: 8080
    tools:
    - name: get-inventory-valuation
      description: Retrieve inventory valuation from QuickBooks.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: The valuation date.
      call: qbo.get-inventory-report
      with:
        as_of_date: '{{as_of_date}}'
      outputParameters:
      - name: total_value
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[3].value
      - name: item_count
        type: number
        mapping: $.Rows.Row.length
      - name: total_cogs
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[2].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/InventoryValuationSummary?report_date={{as_of_date}}
      inputParameters:
      - name: as_of_date
        in: query
      operations:
      - name: get-inventory-report
        method: GET
Open in Framework → View in Fleet → quickbooks-inventory-valuation.yml

Pulls invoice and payment data from QuickBooks, cross-references with Salesforce closed-won opportunities, and generates a reconciliation summary uploaded to Google Drive.

naftiko: '0.5'
info:
  label: Revenue Recognition Reconciler
  description: Pulls invoice and payment data from QuickBooks, cross-references with Salesforce closed-won opportunities, and generates a reconciliation summary uploaded to Google Drive.
  tags:
  - accounting
  - quickbooks
  - salesforce
  - google-drive
  - revenue-recognition
capability:
  exposes:
  - type: mcp
    namespace: revenue-reconciliation
    port: 8080
    tools:
    - name: reconcile-revenue
      description: Given a date range, pull QBO invoices and Salesforce won deals, reconcile, and upload the summary to Google Drive.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Reconciliation period start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Reconciliation period end date in YYYY-MM-DD format.
      - name: drive_folder_id
        in: body
        type: string
        description: The Google Drive folder ID for reconciliation reports.
      steps:
      - name: get-invoices
        type: call
        call: qbo.query-invoices
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: get-won-deals
        type: call
        call: sfdc.query-opportunities
        with:
          close_date_start: '{{start_date}}'
          close_date_end: '{{end_date}}'
          stage: Closed Won
      - name: upload-reconciliation
        type: call
        call: gdrive.upload-file
        with:
          folder_id: '{{drive_folder_id}}'
          file_name: Revenue_Recon_{{start_date}}_{{end_date}}.csv
          content: 'QBO invoices: {{get-invoices.total_count}}, total: {{get-invoices.total_amount}}. SFDC won deals: {{get-won-deals.total_count}}, total: {{get-won-deals.total_amount}}.'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-invoices
        method: GET
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - 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
      inputParameters:
      - name: uploadType
        in: query
        value: multipart
      operations:
      - name: upload-file
        method: POST
Open in Framework → View in Fleet → revenue-recognition-reconciler.yml

Retrieves time tracking report from QuickBooks Online, returning total hours, billable hours, and hours by employee for service-based businesses.

naftiko: '0.5'
info:
  label: QuickBooks Time Tracking Report
  description: Retrieves time tracking report from QuickBooks Online, returning total hours, billable hours, and hours by employee for service-based businesses.
  tags:
  - time-tracking
  - quickbooks
  - payroll
capability:
  exposes:
  - type: mcp
    namespace: qbo-time-tracking
    port: 8080
    tools:
    - name: get-time-report
      description: Retrieve time tracking report from QuickBooks.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Report start date.
      - name: end_date
        in: body
        type: string
        description: Report end date.
      call: qbo.get-time-activities
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: total_hours
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[1].value
      - name: billable_hours
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[2].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/TimeActivityDetail?start_date={{start_date}}&end_date={{end_date}}
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-time-activities
        method: GET
Open in Framework → View in Fleet → quickbooks-time-tracking-report.yml

Retrieves the balance sheet report from QuickBooks Online, returning total assets, total liabilities, and total equity for a given date.

naftiko: '0.5'
info:
  label: QuickBooks Balance Sheet Report
  description: Retrieves the balance sheet report from QuickBooks Online, returning total assets, total liabilities, and total equity for a given date.
  tags:
  - accounting
  - quickbooks
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: qbo-balance-sheet
    port: 8080
    tools:
    - name: get-balance-sheet
      description: Retrieve balance sheet from QuickBooks Online.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: The balance sheet date.
      call: qbo.get-balance-sheet
      with:
        as_of_date: '{{as_of_date}}'
      outputParameters:
      - name: total_assets
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[1].value
      - name: total_liabilities
        type: string
        mapping: $.Rows.Row[1].Summary.ColData[1].value
      - name: total_equity
        type: string
        mapping: $.Rows.Row[2].Summary.ColData[1].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/BalanceSheet?date_macro=Custom&start_date={{as_of_date}}&end_date={{as_of_date}}
      inputParameters:
      - name: as_of_date
        in: query
      operations:
      - name: get-balance-sheet
        method: GET
Open in Framework → View in Fleet → quickbooks-balance-sheet-report.yml

When a new employee is added, provisions a Keycloak identity, assigns realm roles based on department, and syncs the user profile to Salesforce as an internal contact.

naftiko: '0.5'
info:
  label: Keycloak User Provisioning Pipeline
  description: When a new employee is added, provisions a Keycloak identity, assigns realm roles based on department, and syncs the user profile to Salesforce as an internal contact.
  tags:
  - platform
  - keycloak
  - salesforce
  - identity-management
  - security
capability:
  exposes:
  - type: mcp
    namespace: identity-provisioning
    port: 8080
    tools:
    - name: provision-user
      description: Given employee details, create a Keycloak user, assign roles, and sync to Salesforce.
      inputParameters:
      - name: email
        in: body
        type: string
        description: The employee email address.
      - name: first_name
        in: body
        type: string
        description: The employee first name.
      - name: last_name
        in: body
        type: string
        description: The employee last name.
      - name: department
        in: body
        type: string
        description: The employee department for role assignment.
      steps:
      - name: create-user
        type: call
        call: keycloak.create-user
        with:
          email: '{{email}}'
          firstName: '{{first_name}}'
          lastName: '{{last_name}}'
          enabled: 'true'
      - name: assign-roles
        type: call
        call: keycloak.assign-role
        with:
          user_id: '{{create-user.id}}'
          role_name: '{{department}}-member'
      - name: sync-to-sfdc
        type: call
        call: sfdc.create-contact
        with:
          email: '{{email}}'
          first_name: '{{first_name}}'
          last_name: '{{last_name}}'
          department: '{{department}}'
          keycloak_id: '{{create-user.id}}'
  consumes:
  - type: http
    namespace: keycloak
    baseUri: https://auth.intuit.com/admin/realms/intuit
    authentication:
      type: bearer
      token: $secrets.keycloak_admin_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
    - name: role-mappings
      path: /users/{{user_id}}/role-mappings/realm
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: assign-role
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: contacts
      path: /sobjects/Contact
      operations:
      - name: create-contact
        method: POST
Open in Framework → View in Fleet → keycloak-user-provisioning-pipeline.yml

Retrieves performance metrics for a Mailchimp email campaign including open rate, click rate, bounce rate, and unsubscribe count.

naftiko: '0.5'
info:
  label: Mailchimp Campaign Stats
  description: Retrieves performance metrics for a Mailchimp email campaign including open rate, click rate, bounce rate, and unsubscribe count.
  tags:
  - marketing
  - mailchimp
  - email-campaigns
capability:
  exposes:
  - type: mcp
    namespace: mailchimp-analytics
    port: 8080
    tools:
    - name: get-campaign-report
      description: Given a Mailchimp campaign ID, return 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}}'
      outputParameters:
      - name: open_rate
        type: string
        mapping: $.opens.open_rate
      - name: click_rate
        type: string
        mapping: $.clicks.click_rate
      - name: bounce_rate
        type: string
        mapping: $.bounces.hard_bounces
      - name: emails_sent
        type: string
        mapping: $.emails_sent
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $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-campaign-stats.yml

Checks the latest GitHub Actions workflow run, correlates with Terraform Cloud workspace state, and posts deployment status to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Deployment Pipeline Status Aggregator
  description: Checks the latest GitHub Actions workflow run, correlates with Terraform Cloud workspace state, and posts deployment status to a Microsoft Teams channel.
  tags:
  - engineering
  - github
  - terraform
  - microsoft-teams
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: deploy-status
    port: 8080
    tools:
    - name: check-deployment
      description: Given a repo, workflow name, and Terraform workspace, aggregate deployment status and notify the team in Microsoft Teams.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository in owner/repo format.
      - name: workflow_name
        in: body
        type: string
        description: The GitHub Actions workflow filename.
      - name: tf_org
        in: body
        type: string
        description: The Terraform Cloud organization.
      - name: tf_workspace
        in: body
        type: string
        description: The Terraform Cloud workspace name.
      - name: teams_channel_webhook
        in: body
        type: string
        description: The Microsoft Teams incoming webhook URL.
      steps:
      - name: get-workflow-run
        type: call
        call: github.get-workflow-runs
        with:
          repo: '{{repo}}'
          workflow_name: '{{workflow_name}}'
      - name: get-tf-status
        type: call
        call: terraform.get-workspace
        with:
          org_name: '{{tf_org}}'
          workspace_name: '{{tf_workspace}}'
      - name: notify-team
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_channel_webhook}}'
          text: 'Deployment update for {{repo}}: CI status={{get-workflow-run.conclusion}}, Terraform workspace={{tf_workspace}} ({{get-tf-status.resource_count}} resources, version {{get-tf-status.terraform_version}})'
  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_name}}/runs
      inputParameters:
      - name: repo
        in: path
      - name: workflow_name
        in: path
      operations:
      - name: get-workflow-runs
        method: GET
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/{{org_name}}/workspaces/{{workspace_name}}
      inputParameters:
      - name: org_name
        in: path
      - name: workspace_name
        in: path
      operations:
      - name: get-workspace
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /teams/webhook
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → deployment-pipeline-status-aggregator.yml

Fetches overdue invoices from QuickBooks Online, looks up the customer contact, and sends a payment reminder via Mailchimp transactional email with invoice details.

naftiko: '0.5'
info:
  label: Invoice Overdue Notification Pipeline
  description: Fetches overdue invoices from QuickBooks Online, looks up the customer contact, and sends a payment reminder via Mailchimp transactional email with invoice details.
  tags:
  - accounting
  - quickbooks
  - mailchimp
  - collections
  - automation
capability:
  exposes:
  - type: mcp
    namespace: collections-automation
    port: 8080
    tools:
    - name: send-overdue-reminder
      description: Given an overdue invoice ID, fetch invoice and customer details from QuickBooks, then send a payment reminder email via Mailchimp Transactional.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The QuickBooks Online invoice ID.
      steps:
      - name: get-invoice
        type: call
        call: qbo.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: get-customer
        type: call
        call: qbo.get-customer
        with:
          customer_id: '{{get-invoice.CustomerRef_value}}'
      - name: send-reminder
        type: call
        call: mailchimp-tx.send-email
        with:
          to_email: '{{get-customer.PrimaryEmailAddr}}'
          to_name: '{{get-customer.DisplayName}}'
          subject: 'Payment Reminder: Invoice #{{invoice_id}} — ${{get-invoice.Balance}} overdue'
          template_name: overdue-invoice-reminder
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: invoices
      path: /invoice/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
    - name: customers
      path: /customer/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: mailchimp-tx
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mandrill_api_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → invoice-overdue-notification-pipeline.yml

Retrieves Terraform workspace status for Intuit infrastructure, returning current state version, resource count, and last apply timestamp.

naftiko: '0.5'
info:
  label: Terraform Infrastructure Status
  description: Retrieves Terraform workspace status for Intuit infrastructure, returning current state version, resource count, and last apply timestamp.
  tags:
  - infrastructure
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: infra-status
    port: 8080
    tools:
    - name: get-workspace-status
      description: Retrieve Terraform workspace status.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: The Terraform workspace name.
      call: terraform.get-workspace
      with:
        workspace_name: '{{workspace_name}}'
      outputParameters:
      - name: state_version
        type: string
        mapping: $.data.attributes.current-state-version-id
      - name: resource_count
        type: number
        mapping: $.data.attributes.resource-count
      - name: last_apply
        type: string
        mapping: $.data.attributes.latest-change-at
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/intuit/workspaces/{{workspace_name}}
      inputParameters:
      - name: workspace_name
        in: path
      operations:
      - name: get-workspace
        method: GET
Open in Framework → View in Fleet → terraform-infrastructure-status.yml

Queries Datadog for the current health status and error rate of a monitored service, returning the overall status and last triggered alert.

naftiko: '0.5'
info:
  label: Datadog Service Health Check
  description: Queries Datadog for the current health status and error rate of a monitored service, returning the overall status and last triggered alert.
  tags:
  - platform
  - monitoring
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: observability
    port: 8080
    tools:
    - name: get-service-health
      description: Given a Datadog monitor ID, return the current status, last triggered timestamp, and associated 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_status
        type: string
        mapping: $.overall_state
      - name: name
        type: string
        mapping: $.name
      - name: message
        type: string
        mapping: $.message
  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

Monitors Mint user spending against budget categories and triggers personalized alert notifications when spending approaches or exceeds configured thresholds.

naftiko: '0.5'
info:
  label: Mint Budget Alert Notification Pipeline
  description: Monitors Mint user spending against budget categories and triggers personalized alert notifications when spending approaches or exceeds configured thresholds.
  tags:
  - personal-finance
  - budgeting
  - notifications
capability:
  exposes:
  - type: mcp
    namespace: mint-budget-alerts
    port: 8080
    tools:
    - name: check-budget-thresholds
      description: Check spending against budget thresholds and trigger alerts.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Mint user identifier.
      - name: budget_category
        in: body
        type: string
        description: Budget category such as dining, groceries, or entertainment.
      call: mint-api.check-budget
      with:
        user: '{{user_id}}'
        category: '{{budget_category}}'
      outputParameters:
      - name: budget_amount
        type: number
        mapping: $.budget.budgetAmount
      - name: spent_amount
        type: number
        mapping: $.budget.spentAmount
      - name: percent_used
        type: number
        mapping: $.budget.percentUsed
  consumes:
  - type: http
    namespace: mint-api
    baseUri: https://api.intuit.com/mint/v1
    authentication:
      type: bearer
      token: $secrets.intuit_mint_api_token
    resources:
    - name: budgets
      path: /users/{{user}}/budgets/{{category}}
      inputParameters:
      - name: user
        in: path
      - name: category
        in: path
      operations:
      - name: check-budget
        method: GET
Open in Framework → View in Fleet → mint-budget-alert-notification-pipeline.yml

Synchronizes inventory levels across multiple sales channels connected to QuickBooks Commerce, preventing overselling and maintaining accurate stock counts across Shopify, Amazon, and eBay.

naftiko: '0.5'
info:
  label: QuickBooks Commerce Multi-Channel Inventory Sync
  description: Synchronizes inventory levels across multiple sales channels connected to QuickBooks Commerce, preventing overselling and maintaining accurate stock counts across Shopify, Amazon, and eBay.
  tags:
  - e-commerce
  - quickbooks-commerce
  - inventory-sync
capability:
  exposes:
  - type: mcp
    namespace: commerce-inventory
    port: 8080
    tools:
    - name: sync-multi-channel-inventory
      description: Synchronize inventory across connected sales channels.
      inputParameters:
      - name: company_id
        in: body
        type: string
        description: The QuickBooks company identifier.
      - name: product_sku
        in: body
        type: string
        description: The product SKU to synchronize.
      call: commerce-api.sync-inventory
      with:
        company: '{{company_id}}'
        sku: '{{product_sku}}'
      outputParameters:
      - name: channels_synced
        type: array
        mapping: $.sync.channelsSynced
      - name: current_stock
        type: integer
        mapping: $.sync.currentStock
      - name: sync_conflicts
        type: array
        mapping: $.sync.conflicts
  consumes:
  - type: http
    namespace: commerce-api
    baseUri: https://api.intuit.com/quickbooks-commerce/v1
    authentication:
      type: bearer
      token: $secrets.intuit_commerce_api_token
    resources:
    - name: inventory-sync
      path: /companies/{{company}}/inventory/sync
      inputParameters:
      - name: company
        in: path
      operations:
      - name: sync-inventory
        method: POST
Open in Framework → View in Fleet → quickbooks-commerce-multi-channel-inventory-sync.yml

Retrieves A/B test results from a Mailchimp campaign, determines the statistical winner, and sends the winning variant to the remaining audience automatically.

naftiko: '0.5'
info:
  label: Mailchimp A/B Test Analyzer
  description: Retrieves A/B test results from a Mailchimp campaign, determines the statistical winner, and sends the winning variant to the remaining audience automatically.
  tags:
  - marketing
  - mailchimp
  - ab-testing
  - email-campaigns
capability:
  exposes:
  - type: mcp
    namespace: ab-testing
    port: 8080
    tools:
    - name: finalize-ab-test
      description: Given a Mailchimp A/B campaign ID, pull test results, determine the winner, and send the winning variant.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Mailchimp A/B test campaign ID.
      steps:
      - name: get-ab-results
        type: call
        call: mailchimp.get-campaign-report
        with:
          campaign_id: '{{campaign_id}}'
      - name: send-winner
        type: call
        call: mailchimp.send-campaign
        with:
          campaign_id: '{{campaign_id}}'
          winning_combination: '{{get-ab-results.winner_id}}'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_api_key
    resources:
    - name: reports
      path: /reports/{{campaign_id}}
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-report
        method: GET
    - 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-a-b-test-analyzer.yml

Queries QuickBooks Online for a customer's current open balance and returns total receivables and last payment date.

naftiko: '0.5'
info:
  label: QuickBooks Customer Balance
  description: Queries QuickBooks Online for a customer's current open balance and returns total receivables and last payment date.
  tags:
  - accounting
  - quickbooks
  - receivables
capability:
  exposes:
  - type: mcp
    namespace: qbo-customers
    port: 8080
    tools:
    - name: get-customer-balance
      description: Given a QuickBooks customer ID, return the customer name, open balance, and last payment received date.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The QuickBooks Online customer ID.
      call: qbo.get-customer
      with:
        customer_id: '{{customer_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.Customer.DisplayName
      - name: balance
        type: string
        mapping: $.Customer.Balance
      - name: currency
        type: string
        mapping: $.Customer.CurrencyRef.value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: customers
      path: /customer/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
Open in Framework → View in Fleet → quickbooks-customer-balance.yml

Retrieves the cash flow statement from QuickBooks Online, returning operating cash flow, investing activities, financing activities, and net cash change.

naftiko: '0.5'
info:
  label: QuickBooks Cash Flow Statement
  description: Retrieves the cash flow statement from QuickBooks Online, returning operating cash flow, investing activities, financing activities, and net cash change.
  tags:
  - accounting
  - quickbooks
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: qbo-cashflow
    port: 8080
    tools:
    - name: get-cash-flow
      description: Retrieve cash flow statement from QuickBooks Online.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Report start date.
      - name: end_date
        in: body
        type: string
        description: Report end date.
      call: qbo.get-cashflow
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: operating
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[1].value
      - name: investing
        type: string
        mapping: $.Rows.Row[1].Summary.ColData[1].value
      - name: financing
        type: string
        mapping: $.Rows.Row[2].Summary.ColData[1].value
      - name: net_change
        type: string
        mapping: $.Rows.Row[3].Summary.ColData[1].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/CashFlow?start_date={{start_date}}&end_date={{end_date}}
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-cashflow
        method: GET
Open in Framework → View in Fleet → quickbooks-cash-flow-statement.yml

When a new customer is created in QuickBooks Online, creates a matching Salesforce account, adds them to a Mailchimp welcome audience, and notifies the account owner in Microsoft Teams.

naftiko: '0.5'
info:
  label: New Customer Onboarding Pipeline
  description: When a new customer is created in QuickBooks Online, creates a matching Salesforce account, adds them to a Mailchimp welcome audience, and notifies the account owner in Microsoft Teams.
  tags:
  - small-business
  - quickbooks
  - salesforce
  - mailchimp
  - microsoft-teams
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: customer-onboarding
    port: 8080
    tools:
    - name: onboard-new-customer
      description: Given a QuickBooks customer ID, fetch their details, create a Salesforce account, add to Mailchimp audience, and send a Teams notification.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The QuickBooks Online customer ID.
      - name: account_owner_email
        in: body
        type: string
        description: The email of the account owner to notify.
      steps:
      - name: get-customer
        type: call
        call: qbo.get-customer
        with:
          customer_id: '{{customer_id}}'
      - name: create-sfdc-account
        type: call
        call: sfdc.create-account
        with:
          name: '{{get-customer.DisplayName}}'
          phone: '{{get-customer.PrimaryPhone}}'
          email: '{{get-customer.PrimaryEmailAddr}}'
      - name: add-to-audience
        type: call
        call: mailchimp.add-member
        with:
          list_id: welcome-series
          email_address: '{{get-customer.PrimaryEmailAddr}}'
          status: subscribed
          merge_fields_FNAME: '{{get-customer.GivenName}}'
      - name: notify-owner
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{account_owner_email}}'
          text: 'New customer onboarded: {{get-customer.DisplayName}}. Salesforce account: {{create-sfdc-account.id}}. Added to Mailchimp welcome series.'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: customers
      path: /customer/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: accounts
      path: /sobjects/Account
      operations:
      - name: create-account
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_api_key
    resources:
    - name: members
      path: /lists/{{list_id}}/members
      inputParameters:
      - name: list_id
        in: path
      operations:
      - name: add-member
        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-customer-onboarding-pipeline.yml

Retrieves NiFi data ingestion pipeline status for Intuit data platform, returning active threads, queued flowfiles, and bytes processed.

naftiko: '0.5'
info:
  label: NiFi Data Ingestion Pipeline Status
  description: Retrieves NiFi data ingestion pipeline status for Intuit data platform, returning active threads, queued flowfiles, and bytes processed.
  tags:
  - data-engineering
  - nifi
capability:
  exposes:
  - type: mcp
    namespace: data-ingestion
    port: 8080
    tools:
    - name: get-pipeline-status
      description: Retrieve NiFi data pipeline status.
      inputParameters:
      - name: process_group_id
        in: body
        type: string
        description: The NiFi process group ID.
      call: nifi.get-process-group
      with:
        process_group_id: '{{process_group_id}}'
      outputParameters:
      - name: active_threads
        type: number
        mapping: $.processGroupStatus.aggregateSnapshot.activeThreadCount
      - name: queued_count
        type: number
        mapping: $.processGroupStatus.aggregateSnapshot.queuedCount
      - name: bytes_read
        type: string
        mapping: $.processGroupStatus.aggregateSnapshot.bytesRead
  consumes:
  - type: http
    namespace: nifi
    baseUri: https://nifi.intuit.com/nifi-api
    authentication:
      type: bearer
      token: $secrets.nifi_token
    resources:
    - name: process-groups
      path: /flow/process-groups/{{process_group_id}}/status
      inputParameters:
      - name: process_group_id
        in: path
      operations:
      - name: get-process-group
        method: GET
Open in Framework → View in Fleet → nifi-data-ingestion-pipeline-status.yml

Fetches an unpaid vendor bill from QuickBooks, creates a bill payment, and sends a payment confirmation notification to the vendor via Mailchimp transactional email.

naftiko: '0.5'
info:
  label: Vendor Bill to Payment Orchestrator
  description: Fetches an unpaid vendor bill from QuickBooks, creates a bill payment, and sends a payment confirmation notification to the vendor via Mailchimp transactional email.
  tags:
  - accounting
  - quickbooks
  - mailchimp
  - accounts-payable
  - payments
capability:
  exposes:
  - type: mcp
    namespace: ap-payments
    port: 8080
    tools:
    - name: pay-vendor-bill
      description: Given a QuickBooks bill ID, create a payment for the bill, fetch vendor details, and send a payment confirmation email.
      inputParameters:
      - name: bill_id
        in: body
        type: string
        description: The QuickBooks Online bill ID.
      - name: payment_account_id
        in: body
        type: string
        description: The QuickBooks bank account ID for payment.
      steps:
      - name: get-bill
        type: call
        call: qbo.get-bill
        with:
          bill_id: '{{bill_id}}'
      - name: create-payment
        type: call
        call: qbo.create-bill-payment
        with:
          vendor_id: '{{get-bill.VendorRef_value}}'
          total_amount: '{{get-bill.Balance}}'
          bill_id: '{{bill_id}}'
          account_id: '{{payment_account_id}}'
      - name: get-vendor
        type: call
        call: qbo.get-vendor
        with:
          vendor_id: '{{get-bill.VendorRef_value}}'
      - name: send-confirmation
        type: call
        call: mailchimp-tx.send-email
        with:
          to_email: '{{get-vendor.PrimaryEmailAddr}}'
          to_name: '{{get-vendor.DisplayName}}'
          subject: 'Payment confirmation: ${{get-bill.Balance}} for bill #{{bill_id}}'
          template_name: vendor-payment-confirmation
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: bills
      path: /bill/{{bill_id}}
      inputParameters:
      - name: bill_id
        in: path
      operations:
      - name: get-bill
        method: GET
    - name: bill-payments
      path: /billpayment
      operations:
      - name: create-bill-payment
        method: POST
    - name: vendors
      path: /vendor/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
  - type: http
    namespace: mailchimp-tx
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mandrill_api_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-email
        method: POST
Open in Framework → View in Fleet → vendor-bill-to-payment-orchestrator.yml

Validates a tax return via the Intuit Tax engine, submits the e-file to the IRS gateway, and logs the submission in Salesforce as a case for tracking.

naftiko: '0.5'
info:
  label: Tax Return Submission Orchestrator
  description: Validates a tax return via the Intuit Tax engine, submits the e-file to the IRS gateway, and logs the submission in Salesforce as a case for tracking.
  tags:
  - tax
  - turbotax
  - salesforce
  - e-filing
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: tax-efile
    port: 8080
    tools:
    - name: submit-tax-return
      description: Given a tax return ID and taxpayer ID, validate the return, submit to the IRS e-file gateway, and create a Salesforce tracking case.
      inputParameters:
      - name: return_id
        in: body
        type: string
        description: The Intuit tax return ID.
      - name: taxpayer_id
        in: body
        type: string
        description: The taxpayer profile ID.
      steps:
      - name: validate-return
        type: call
        call: tax-platform.validate-return
        with:
          return_id: '{{return_id}}'
      - name: submit-efile
        type: call
        call: tax-platform.submit-efile
        with:
          return_id: '{{return_id}}'
          taxpayer_id: '{{taxpayer_id}}'
      - name: create-tracking-case
        type: call
        call: sfdc.create-case
        with:
          subject: 'E-file submitted: Return {{return_id}} for taxpayer {{taxpayer_id}}'
          description: 'Validation status: {{validate-return.status}}. E-file confirmation: {{submit-efile.confirmation_number}}. Submitted: {{submit-efile.submitted_at}}.'
          type: Tax_Filing
          priority: Medium
  consumes:
  - type: http
    namespace: tax-platform
    baseUri: https://tax.api.intuit.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_platform_token
    resources:
    - name: validation
      path: /returns/{{return_id}}/validate
      inputParameters:
      - name: return_id
        in: path
      operations:
      - name: validate-return
        method: POST
    - name: efile
      path: /returns/{{return_id}}/efile
      inputParameters:
      - name: return_id
        in: path
      operations:
      - name: submit-efile
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → tax-return-submission-orchestrator.yml

Orchestrates subscription renewals by checking eligibility in the billing system, applying discounts from the promotion engine, processing payment via Stripe, and updating the CRM in Salesforce.

naftiko: '0.5'
info:
  label: Customer Subscription Renewal Orchestrator
  description: Orchestrates subscription renewals by checking eligibility in the billing system, applying discounts from the promotion engine, processing payment via Stripe, and updating the CRM in Salesforce.
  tags:
  - billing
  - subscriptions
  - stripe
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: subscription-renewal
    port: 8080
    tools:
    - name: process-renewal
      description: Process a customer subscription renewal.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: The subscription ID.
      - name: customer_id
        in: body
        type: string
        description: The customer ID.
      steps:
      - name: check-eligibility
        type: call
        call: billing.check-renewal
        with:
          subscription_id: '{{subscription_id}}'
      - name: apply-discount
        type: call
        call: promo-engine.get-best-offer
        with:
          customer_id: '{{customer_id}}'
          product: '{{check-eligibility.product_name}}'
      - name: process-payment
        type: call
        call: stripe.create-invoice
        with:
          customer_id: '{{customer_id}}'
          amount: '{{apply-discount.final_price}}'
          description: 'Renewal: {{check-eligibility.product_name}}'
      - name: update-crm
        type: call
        call: sfdc.update-opportunity
        with:
          subscription_id: '{{subscription_id}}'
          stage: Closed Won
          amount: '{{apply-discount.final_price}}'
  consumes:
  - type: http
    namespace: billing
    baseUri: https://billing.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.billing_token
    resources:
    - name: renewals
      path: /subscriptions/{{subscription_id}}/renewal-check
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: check-renewal
        method: GET
  - type: http
    namespace: promo-engine
    baseUri: https://promotions.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.promo_engine_token
    resources:
    - name: offers
      path: /best-offer
      operations:
      - name: get-best-offer
        method: POST
  - type: http
    namespace: stripe
    baseUri: https://api.stripe.com/v1
    authentication:
      type: bearer
      token: $secrets.stripe_secret_key
    resources:
    - name: invoices
      path: /invoices
      operations:
      - name: create-invoice
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: update-opportunity
        method: POST
Open in Framework → View in Fleet → customer-subscription-renewal-orchestrator.yml

Generates a customer statement from QuickBooks Online, returning open balance, last payment date, and aging summary for a specific customer.

naftiko: '0.5'
info:
  label: QuickBooks Customer Statement Generator
  description: Generates a customer statement from QuickBooks Online, returning open balance, last payment date, and aging summary for a specific customer.
  tags:
  - accounting
  - quickbooks
  - receivables
capability:
  exposes:
  - type: mcp
    namespace: qbo-statements
    port: 8080
    tools:
    - name: generate-statement
      description: Generate a customer statement from QuickBooks.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The QuickBooks customer ID.
      call: qbo.get-customer-balance
      with:
        customer_id: '{{customer_id}}'
      outputParameters:
      - name: open_balance
        type: string
        mapping: $.Customer.Balance
      - name: display_name
        type: string
        mapping: $.Customer.DisplayName
      - name: last_payment
        type: string
        mapping: $.Customer.LastPaymentDate
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: customers
      path: /customer/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer-balance
        method: GET
Open in Framework → View in Fleet → quickbooks-customer-statement-generator.yml

When a new tax regulation is added to the knowledge base, creates a Confluence page with the formatted content and notifies the tax team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Publisher
  description: When a new tax regulation is added to the knowledge base, creates a Confluence page with the formatted content and notifies the tax team in Microsoft Teams.
  tags:
  - tax
  - confluence
  - microsoft-teams
  - knowledge-management
capability:
  exposes:
  - type: mcp
    namespace: tax-knowledge
    port: 8080
    tools:
    - name: publish-tax-update
      description: Given a regulation title, content, and space key, create a Confluence page and notify the tax team in Teams.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: The Confluence space key.
      - name: title
        in: body
        type: string
        description: The page title for the tax regulation update.
      - name: content
        in: body
        type: string
        description: The formatted page content.
      - name: teams_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook for the tax team.
      steps:
      - name: create-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          title: '{{title}}'
          body: '{{content}}'
      - name: notify-team
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'New tax regulation published: {{title}}. View at: {{create-page.url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://intuit.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: webhooks
      path: /teams/webhook
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-base-publisher.yml

Pulls audience growth statistics from Mailchimp including new subscribers, unsubscribes, and net growth for a given month, and posts a summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: Mailchimp List Growth Tracker
  description: Pulls audience growth statistics from Mailchimp including new subscribers, unsubscribes, and net growth for a given month, and posts a summary to Microsoft Teams.
  tags:
  - marketing
  - mailchimp
  - microsoft-teams
  - audience-management
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: audience-growth
    port: 8080
    tools:
    - name: track-list-growth
      description: Given a Mailchimp list ID and date range, pull growth stats and post a summary to Microsoft Teams.
      inputParameters:
      - name: list_id
        in: body
        type: string
        description: The Mailchimp audience list ID.
      - name: teams_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook for marketing channel.
      steps:
      - name: get-growth
        type: call
        call: mailchimp.get-list-growth
        with:
          list_id: '{{list_id}}'
      - name: post-summary
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'Audience Growth Report — List {{list_id}}: Total members: {{get-growth.member_count}}. New this month: {{get-growth.month_subscribed}}. Unsubscribed: {{get-growth.month_unsubscribed}}. Net growth: {{get-growth.net_growth}}.'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_api_key
    resources:
    - name: growth-history
      path: /lists/{{list_id}}/growth-history
      inputParameters:
      - name: list_id
        in: path
      operations:
      - name: get-list-growth
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /teams/webhook
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → mailchimp-list-growth-tracker.yml

Pulls TurboTax filing volume metrics from Datadog, cross-references with AWS scaling group capacity, and posts a capacity summary to a Microsoft Teams channel for operations.

naftiko: '0.5'
info:
  label: Tax Season Capacity Planning
  description: Pulls TurboTax filing volume metrics from Datadog, cross-references with AWS scaling group capacity, and posts a capacity summary to a Microsoft Teams channel for operations.
  tags:
  - tax
  - turbotax
  - datadog
  - amazon-web-services
  - microsoft-teams
  - capacity-planning
capability:
  exposes:
  - type: mcp
    namespace: tax-capacity
    port: 8080
    tools:
    - name: check-tax-capacity
      description: Pull TurboTax filing throughput from Datadog, check AWS Auto Scaling group capacity, and post a summary to Microsoft Teams.
      inputParameters:
      - name: datadog_query
        in: body
        type: string
        description: The Datadog metrics query for filing throughput.
      - name: asg_name
        in: body
        type: string
        description: The AWS Auto Scaling group name.
      - name: teams_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook URL for the ops channel.
      steps:
      - name: get-filing-metrics
        type: call
        call: datadog.query-metrics
        with:
          query: '{{datadog_query}}'
      - name: get-asg-status
        type: call
        call: aws.describe-asg
        with:
          asg_name: '{{asg_name}}'
      - name: notify-ops
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'Tax Season Capacity: Filing rate={{get-filing-metrics.avg_value}}/min. ASG {{asg_name}}: {{get-asg-status.desired_capacity}}/{{get-asg-status.max_size}} instances. Utilization: {{get-asg-status.utilization_pct}}%.'
  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: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: aws
    baseUri: https://autoscaling.us-west-2.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_session_token
    resources:
    - name: auto-scaling-groups
      path: /
      inputParameters:
      - name: Action
        in: query
        value: DescribeAutoScalingGroups
      - name: AutoScalingGroupNames.member.1
        in: query
      operations:
      - name: describe-asg
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /teams/webhook
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → tax-season-capacity-planning.yml

Pulls Mailchimp campaign report data, enriches with Google Analytics conversion metrics, and updates the associated Salesforce campaign record with performance results.

naftiko: '0.5'
info:
  label: Campaign Performance to CRM Sync
  description: Pulls Mailchimp campaign report data, enriches with Google Analytics conversion metrics, and updates the associated Salesforce campaign record with performance results.
  tags:
  - marketing
  - mailchimp
  - google-analytics
  - salesforce
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: marketing-analytics
    port: 8080
    tools:
    - name: sync-campaign-to-crm
      description: Given a Mailchimp campaign ID and Salesforce campaign ID, pull email and web analytics data, then update the Salesforce campaign with results.
      inputParameters:
      - name: mailchimp_campaign_id
        in: body
        type: string
        description: The Mailchimp campaign ID.
      - name: sfdc_campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID to update.
      - name: ga_property_id
        in: body
        type: string
        description: The Google Analytics 4 property ID.
      steps:
      - name: get-email-stats
        type: call
        call: mailchimp.get-campaign-report
        with:
          campaign_id: '{{mailchimp_campaign_id}}'
      - name: get-web-conversions
        type: call
        call: ga4.run-report
        with:
          property_id: '{{ga_property_id}}'
          campaign_id: '{{mailchimp_campaign_id}}'
      - name: update-sfdc-campaign
        type: call
        call: sfdc.update-campaign
        with:
          campaign_id: '{{sfdc_campaign_id}}'
          emails_sent: '{{get-email-stats.emails_sent}}'
          open_rate: '{{get-email-stats.open_rate}}'
          click_rate: '{{get-email-stats.click_rate}}'
          conversions: '{{get-web-conversions.total_conversions}}'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $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: ga4
    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: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_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 → campaign-performance-to-crm-sync.yml

Retrieves deployment pipeline status from Harness for Intuit CI/CD, returning execution status, stages completed, and deployment duration.

naftiko: '0.5'
info:
  label: Harness Deployment Pipeline Status
  description: Retrieves deployment pipeline status from Harness for Intuit CI/CD, returning execution status, stages completed, and deployment duration.
  tags:
  - ci-cd
  - harness
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: deployment-pipelines
    port: 8080
    tools:
    - name: get-deployment-status
      description: Retrieve Harness deployment pipeline status.
      inputParameters:
      - name: execution_id
        in: body
        type: string
        description: The pipeline execution ID.
      call: harness.get-execution
      with:
        execution_id: '{{execution_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.execution.status
      - name: stages_completed
        type: number
        mapping: $.data.execution.stagesCompleted
      - name: duration
        type: string
        mapping: $.data.execution.totalDuration
  consumes:
  - type: http
    namespace: harness
    baseUri: https://app.harness.io/gateway/pipeline/api
    authentication:
      type: bearer
      token: $secrets.harness_api_key
    resources:
    - name: executions
      path: /pipelines/execution/{{execution_id}}
      inputParameters:
      - name: execution_id
        in: path
      operations:
      - name: get-execution
        method: GET
Open in Framework → View in Fleet → harness-deployment-pipeline-status.yml

Orchestrates month-end close by reconciling bank accounts in QuickBooks, generating financial reports, creating review tasks in Salesforce, and publishing the close package to Confluence.

naftiko: '0.5'
info:
  label: End of Month Close Orchestrator
  description: Orchestrates month-end close by reconciling bank accounts in QuickBooks, generating financial reports, creating review tasks in Salesforce, and publishing the close package to Confluence.
  tags:
  - accounting
  - quickbooks
  - salesforce
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: month-end-close
    port: 8080
    tools:
    - name: execute-close
      description: Execute the month-end close process.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks realm ID.
      - name: period
        in: body
        type: string
        description: The closing period (YYYY-MM).
      steps:
      - name: reconcile-accounts
        type: call
        call: qbo.get-trial-balance
        with:
          realm_id: '{{realm_id}}'
          period: '{{period}}'
      - name: generate-reports
        type: call
        call: qbo.get-financial-package
        with:
          realm_id: '{{realm_id}}'
          period: '{{period}}'
      - name: create-review-task
        type: call
        call: sfdc.create-task
        with:
          subject: 'Month-end close review: {{period}}'
          description: Trial balance verified. P&L generated. Balance sheet generated.
          priority: High
      - name: publish-package
        type: call
        call: confluence.create-page
        with:
          space: FINANCE
          title: Month-End Close Package - {{period}}
          body: Close package for {{period}}. Reconciliation complete. Reports attached.
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: trial-balance
      path: /reports/TrialBalance
      operations:
      - name: get-trial-balance
        method: GET
    - name: reports
      path: /reports/ProfitAndLoss
      operations:
      - name: get-financial-package
        method: GET
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://intuit.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → end-of-month-close-orchestrator.yml

Retrieves a QuickBooks Online invoice by ID and returns customer name, amount due, due date, and payment status.

naftiko: '0.5'
info:
  label: QuickBooks Invoice Lookup
  description: Retrieves a QuickBooks Online invoice by ID and returns customer name, amount due, due date, and payment status.
  tags:
  - accounting
  - quickbooks
  - invoicing
capability:
  exposes:
  - type: mcp
    namespace: qbo-invoicing
    port: 8080
    tools:
    - name: get-invoice
      description: Given a QuickBooks invoice ID, return the invoice details including customer, amount, due date, and status.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The QuickBooks Online invoice ID.
      call: qbo.get-invoice
      with:
        invoice_id: '{{invoice_id}}'
      outputParameters:
      - name: customer_name
        type: string
        mapping: $.Invoice.CustomerRef.name
      - name: total_amount
        type: string
        mapping: $.Invoice.TotalAmt
      - name: due_date
        type: string
        mapping: $.Invoice.DueDate
      - name: balance
        type: string
        mapping: $.Invoice.Balance
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: invoices
      path: /invoice/{{invoice_id}}
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → quickbooks-invoice-lookup.yml

Syncs financial data from QuickBooks to TurboTax by extracting the profit and loss report, mapping to tax categories, importing into the tax return, and verifying data integrity.

naftiko: '0.5'
info:
  label: QuickBooks to TurboTax Data Sync Pipeline
  description: Syncs financial data from QuickBooks to TurboTax by extracting the profit and loss report, mapping to tax categories, importing into the tax return, and verifying data integrity.
  tags:
  - tax
  - quickbooks
  - turbotax
  - integration
capability:
  exposes:
  - type: mcp
    namespace: qb-tt-sync
    port: 8080
    tools:
    - name: sync-to-turbotax
      description: Sync QuickBooks financial data to TurboTax.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks realm ID.
      - name: return_id
        in: body
        type: string
        description: The TurboTax return ID.
      steps:
      - name: extract-financials
        type: call
        call: qbo.get-profit-loss
        with:
          realm_id: '{{realm_id}}'
      - name: map-categories
        type: call
        call: tax-platform.map-to-schedule-c
        with:
          income: '{{extract-financials.total_income}}'
          expenses: '{{extract-financials.total_expenses}}'
      - name: import-data
        type: call
        call: tax-platform.import-financial-data
        with:
          return_id: '{{return_id}}'
          mapped_data: '{{map-categories.mapped_data_id}}'
      - name: verify-integrity
        type: call
        call: tax-platform.verify-import
        with:
          return_id: '{{return_id}}'
          import_id: '{{import-data.import_id}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/ProfitAndLoss
      operations:
      - name: get-profit-loss
        method: GET
  - type: http
    namespace: tax-platform
    baseUri: https://tax.api.intuit.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_platform_token
    resources:
    - name: mapping
      path: /schedule-c/map
      operations:
      - name: map-to-schedule-c
        method: POST
    - name: import
      path: /returns/{{return_id}}/import
      inputParameters:
      - name: return_id
        in: path
      operations:
      - name: import-financial-data
        method: POST
    - name: verify
      path: /returns/{{return_id}}/verify
      inputParameters:
      - name: return_id
        in: path
      operations:
      - name: verify-import
        method: POST
Open in Framework → View in Fleet → quickbooks-to-turbotax-data-sync-pipeline.yml

Retrieves 1099 contractor payment data from QuickBooks Online, returning contractor name, total payments, tax ID status, and filing readiness.

naftiko: '0.5'
info:
  label: QuickBooks 1099 Contractor Report
  description: Retrieves 1099 contractor payment data from QuickBooks Online, returning contractor name, total payments, tax ID status, and filing readiness.
  tags:
  - tax
  - quickbooks
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: qbo-contractors
    port: 8080
    tools:
    - name: get-1099-data
      description: Retrieve 1099 contractor data from QuickBooks.
      inputParameters:
      - name: tax_year
        in: body
        type: string
        description: The tax year.
      call: qbo.get-1099-report
      with:
        tax_year: '{{tax_year}}'
      outputParameters:
      - name: contractor_count
        type: number
        mapping: $.Report.Rows.Row.length
      - name: total_payments
        type: string
        mapping: $.Report.Rows.Summary.TotalPayments
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/TransactionListByVendor?date_macro=This Year
      operations:
      - name: get-1099-report
        method: GET
Open in Framework → View in Fleet → quickbooks-1099-contractor-report.yml

Pulls application performance metrics from New Relic including response time, throughput, and error rate for establishing performance baselines.

naftiko: '0.5'
info:
  label: New Relic Performance Baseline
  description: Pulls application performance metrics from New Relic including response time, throughput, and error rate for establishing performance baselines.
  tags:
  - platform
  - new-relic
  - monitoring
  - performance
capability:
  exposes:
  - type: mcp
    namespace: newrelic-perf
    port: 8080
    tools:
    - name: get-app-performance
      description: Given a New Relic application ID, return the current response time, throughput, and error rate 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: 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: bearer
      token: $secrets.newrelic_api_key
    resources:
    - name: applications
      path: /applications/{{app_id}}.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-metrics
        method: GET
Open in Framework → View in Fleet → new-relic-performance-baseline.yml

Checks the status of a GitLab CI/CD pipeline, retrieves job logs for failed stages, and posts a failure summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: GitLab CI Pipeline Monitor
  description: Checks the status of a GitLab CI/CD pipeline, retrieves job logs for failed stages, and posts a failure summary to Microsoft Teams.
  tags:
  - engineering
  - gitlab
  - microsoft-teams
  - ci-cd
capability:
  exposes:
  - type: mcp
    namespace: gitlab-ci
    port: 8080
    tools:
    - name: check-pipeline-status
      description: Given a GitLab project ID and pipeline ID, check status, get failed job logs, and notify the team in Microsoft Teams.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The GitLab project ID.
      - name: pipeline_id
        in: body
        type: string
        description: The GitLab pipeline ID.
      - name: teams_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook for CI notifications.
      steps:
      - name: get-pipeline
        type: call
        call: gitlab.get-pipeline
        with:
          project_id: '{{project_id}}'
          pipeline_id: '{{pipeline_id}}'
      - name: get-failed-jobs
        type: call
        call: gitlab.get-pipeline-jobs
        with:
          project_id: '{{project_id}}'
          pipeline_id: '{{pipeline_id}}'
          scope: failed
      - name: notify-team
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'Pipeline {{pipeline_id}} status: {{get-pipeline.status}}. Failed jobs: {{get-failed-jobs.count}}. Ref: {{get-pipeline.ref}}. View: {{get-pipeline.web_url}}'
  consumes:
  - type: http
    namespace: gitlab
    baseUri: https://gitlab.intuit.com/api/v4
    authentication:
      type: bearer
      token: $secrets.gitlab_token
    resources:
    - name: pipelines
      path: /projects/{{project_id}}/pipelines/{{pipeline_id}}
      inputParameters:
      - name: project_id
        in: path
      - name: pipeline_id
        in: path
      operations:
      - name: get-pipeline
        method: GET
    - name: pipeline-jobs
      path: /projects/{{project_id}}/pipelines/{{pipeline_id}}/jobs
      inputParameters:
      - name: project_id
        in: path
      - name: pipeline_id
        in: path
      - name: scope
        in: query
      operations:
      - name: get-pipeline-jobs
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /teams/webhook
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → gitlab-ci-pipeline-monitor.yml

Analyzes a tax return using the Intuit AI fraud scoring model, checks against known fraud patterns in Elasticsearch, and creates a Salesforce case for review if the risk score exceeds threshold.

naftiko: '0.5'
info:
  label: Tax Fraud Detection Pipeline
  description: Analyzes a tax return using the Intuit AI fraud scoring model, checks against known fraud patterns in Elasticsearch, and creates a Salesforce case for review if the risk score exceeds threshold.
  tags:
  - tax
  - turbotax
  - ai-ml
  - fraud-detection
  - elasticsearch
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: fraud-detection
    port: 8080
    tools:
    - name: screen-tax-return
      description: Given a tax return ID, run fraud scoring, check known patterns, and escalate to Salesforce if high risk.
      inputParameters:
      - name: return_id
        in: body
        type: string
        description: The Intuit tax return ID to screen.
      steps:
      - name: score-return
        type: call
        call: intuit-ai.score-fraud
        with:
          return_id: '{{return_id}}'
      - name: check-patterns
        type: call
        call: elasticsearch.search-fraud
        with:
          return_id: '{{return_id}}'
          risk_score: '{{score-return.risk_score}}'
      - name: escalate-case
        type: call
        call: sfdc.create-case
        with:
          subject: 'Fraud review: Return {{return_id}} — risk score {{score-return.risk_score}}'
          description: 'AI fraud score: {{score-return.risk_score}}/100. Matched patterns: {{check-patterns.matched_count}}. Top signal: {{score-return.top_risk_factor}}. Requires manual review.'
          type: Fraud_Review
          priority: High
  consumes:
  - type: http
    namespace: intuit-ai
    baseUri: https://ai.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.intuit_ai_token
    resources:
    - name: fraud
      path: /fraud/score
      operations:
      - name: score-fraud
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://es.intuit.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: fraud-index
      path: /fraud-patterns/_search
      operations:
      - name: search-fraud
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → tax-fraud-detection-pipeline.yml

Creates a segment in Mailchimp based on customer purchase data from QuickBooks, then creates and sends a targeted email campaign to that segment.

naftiko: '0.5'
info:
  label: Mailchimp Audience Segmentation and Campaign Launch
  description: Creates a segment in Mailchimp based on customer purchase data from QuickBooks, then creates and sends a targeted email campaign to that segment.
  tags:
  - marketing
  - mailchimp
  - quickbooks
  - segmentation
  - email-campaigns
capability:
  exposes:
  - type: mcp
    namespace: targeted-campaigns
    port: 8080
    tools:
    - name: launch-targeted-campaign
      description: Given purchase criteria and campaign content, segment QuickBooks customers, create a Mailchimp segment, and send a campaign.
      inputParameters:
      - name: list_id
        in: body
        type: string
        description: The Mailchimp audience list ID.
      - name: segment_name
        in: body
        type: string
        description: Name for the new segment.
      - name: min_purchase_amount
        in: body
        type: string
        description: Minimum lifetime purchase amount for segment qualification.
      - name: campaign_subject
        in: body
        type: string
        description: The email subject line.
      - name: template_id
        in: body
        type: string
        description: The Mailchimp email template ID.
      steps:
      - name: query-customers
        type: call
        call: qbo.query-customers
        with:
          min_balance: '{{min_purchase_amount}}'
      - name: create-segment
        type: call
        call: mailchimp.create-segment
        with:
          list_id: '{{list_id}}'
          name: '{{segment_name}}'
          conditions: '{{query-customers.email_list}}'
      - name: create-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: '{{list_id}}'
          segment_id: '{{create-segment.id}}'
          subject: '{{campaign_subject}}'
          template_id: '{{template_id}}'
      - name: send-campaign
        type: call
        call: mailchimp.send-campaign
        with:
          campaign_id: '{{create-campaign.id}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-customers
        method: GET
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_api_key
    resources:
    - name: segments
      path: /lists/{{list_id}}/segments
      inputParameters:
      - name: list_id
        in: path
      operations:
      - name: create-segment
        method: POST
    - 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-audience-segmentation-and-campaign-launch.yml

Checks the processing status of a tax document uploaded to the Intuit Tax platform, returning extraction completeness and any validation errors.

naftiko: '0.5'
info:
  label: TurboTax Document Status
  description: Checks the processing status of a tax document uploaded to the Intuit Tax platform, returning extraction completeness and any validation errors.
  tags:
  - tax
  - turbotax
  - document-processing
capability:
  exposes:
  - type: mcp
    namespace: tax-documents
    port: 8080
    tools:
    - name: get-document-status
      description: Given a tax document ID, return the OCR extraction status, validation state, and any flagged errors.
      inputParameters:
      - name: document_id
        in: body
        type: string
        description: The Intuit tax document upload ID.
      call: tax-platform.get-document
      with:
        document_id: '{{document_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.document.processingStatus
      - name: form_type
        type: string
        mapping: $.document.detectedFormType
      - name: validation_errors
        type: string
        mapping: $.document.validationErrors
  consumes:
  - type: http
    namespace: tax-platform
    baseUri: https://tax.api.intuit.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_platform_token
    resources:
    - name: documents
      path: /documents/{{document_id}}
      inputParameters:
      - name: document_id
        in: path
      operations:
      - name: get-document
        method: GET
Open in Framework → View in Fleet → turbotax-document-status.yml

Generates an expense report from QuickBooks Online by category, returning top expense categories, total expenses, and month-over-month change.

naftiko: '0.5'
info:
  label: QuickBooks Expense Report Generator
  description: Generates an expense report from QuickBooks Online by category, returning top expense categories, total expenses, and month-over-month change.
  tags:
  - accounting
  - quickbooks
  - expenses
capability:
  exposes:
  - type: mcp
    namespace: qbo-expenses
    port: 8080
    tools:
    - name: get-expense-report
      description: Generate an expense report from QuickBooks.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Report start date.
      - name: end_date
        in: body
        type: string
        description: Report end date.
      call: qbo.get-expense-report
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: total_expenses
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[1].value
      - name: top_category
        type: string
        mapping: $.Rows.Row[0].Rows.Row[0].ColData[0].value
      - name: top_category_amount
        type: string
        mapping: $.Rows.Row[0].Rows.Row[0].ColData[1].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/ProfitAndLoss?start_date={{start_date}}&end_date={{end_date}}
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-expense-report
        method: GET
Open in Framework → View in Fleet → quickbooks-expense-report-generator.yml

Retrieves profit and loss by class from QuickBooks Online for multi-department reporting, returning revenue and expenses segmented by business class.

naftiko: '0.5'
info:
  label: QuickBooks Class Tracking Report
  description: Retrieves profit and loss by class from QuickBooks Online for multi-department reporting, returning revenue and expenses segmented by business class.
  tags:
  - accounting
  - quickbooks
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: qbo-class-tracking
    port: 8080
    tools:
    - name: get-class-report
      description: Retrieve P&L by class from QuickBooks Online.
      inputParameters:
      - name: class_name
        in: body
        type: string
        description: The QuickBooks class name.
      call: qbo.get-pl-by-class
      with:
        class_name: '{{class_name}}'
      outputParameters:
      - name: revenue
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[1].value
      - name: expenses
        type: string
        mapping: $.Rows.Row[1].Summary.ColData[1].value
      - name: net_income
        type: string
        mapping: $.Rows.Row[2].Summary.ColData[1].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/ProfitAndLoss?class={{class_name}}
      inputParameters:
      - name: class_name
        in: query
      operations:
      - name: get-pl-by-class
        method: GET
Open in Framework → View in Fleet → quickbooks-class-tracking-report.yml

Automates QuickBooks Online bank transaction categorization using configurable rules, reducing manual bookkeeping effort by auto-matching transactions to accounts and classes.

naftiko: '0.5'
info:
  label: QuickBooks Online Bank Rule Automation
  description: Automates QuickBooks Online bank transaction categorization using configurable rules, reducing manual bookkeeping effort by auto-matching transactions to accounts and classes.
  tags:
  - bookkeeping
  - quickbooks-online
  - bank-rules
capability:
  exposes:
  - type: mcp
    namespace: qbo-bank-rules
    port: 8080
    tools:
    - name: manage-bank-rules
      description: Create or apply bank categorization rules for a QuickBooks company.
      inputParameters:
      - name: company_id
        in: body
        type: string
        description: The QuickBooks Online company identifier.
      - name: rule_action
        in: body
        type: string
        description: Action such as create, apply, or list.
      - name: rule_criteria
        in: body
        type: object
        description: Rule matching criteria including payee patterns and amount ranges.
      call: qbo-api.manage-bank-rules
      with:
        company: '{{company_id}}'
        action: '{{rule_action}}'
        criteria: '{{rule_criteria}}'
      outputParameters:
      - name: rule_id
        type: string
        mapping: $.rule.id
      - name: transactions_matched
        type: integer
        mapping: $.rule.transactionsMatched
      - name: auto_categorized
        type: integer
        mapping: $.rule.autoCategorized
  consumes:
  - type: http
    namespace: qbo-api
    baseUri: https://api.intuit.com/quickbooks/v1
    authentication:
      type: bearer
      token: $secrets.intuit_qbo_api_token
    resources:
    - name: bank-rules
      path: /companies/{{company}}/bank-rules
      inputParameters:
      - name: company
        in: path
      operations:
      - name: manage-bank-rules
        method: POST
Open in Framework → View in Fleet → quickbooks-online-bank-rule-automation.yml

Retrieves recent sales transactions from QuickBooks, validates tax rates against the Intuit tax compliance engine, and flags discrepancies in a Salesforce case.

naftiko: '0.5'
info:
  label: QuickBooks Sales Tax Compliance Check
  description: Retrieves recent sales transactions from QuickBooks, validates tax rates against the Intuit tax compliance engine, and flags discrepancies in a Salesforce case.
  tags:
  - tax
  - quickbooks
  - compliance
  - salesforce
  - sales-tax
capability:
  exposes:
  - type: mcp
    namespace: sales-tax-compliance
    port: 8080
    tools:
    - name: audit-sales-tax
      description: Given a date range, pull QuickBooks sales, validate tax rates, and create a Salesforce case for any discrepancies.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Audit period start date in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: Audit period end date in YYYY-MM-DD format.
      steps:
      - name: get-sales
        type: call
        call: qbo.query-sales
        with:
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: validate-tax-rates
        type: call
        call: tax-platform.validate-sales-tax
        with:
          transactions: '{{get-sales.results}}'
      - name: flag-discrepancies
        type: call
        call: sfdc.create-case
        with:
          subject: 'Sales tax discrepancies: {{start_date}} to {{end_date}}'
          description: 'Transactions audited: {{validate-tax-rates.total_checked}}. Discrepancies found: {{validate-tax-rates.discrepancy_count}}. Total variance: ${{validate-tax-rates.total_variance}}.'
          type: Tax_Compliance
          priority: Medium
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-sales
        method: GET
  - type: http
    namespace: tax-platform
    baseUri: https://tax.api.intuit.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_platform_token
    resources:
    - name: sales-tax
      path: /validate/sales-tax
      operations:
      - name: validate-sales-tax
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → quickbooks-sales-tax-compliance-check.yml

Fetches model accuracy metrics from Kubeflow, compares against threshold baselines in Datadog, and creates a GitHub issue if model drift is detected.

naftiko: '0.5'
info:
  label: ML Model Performance Monitor
  description: Fetches model accuracy metrics from Kubeflow, compares against threshold baselines in Datadog, and creates a GitHub issue if model drift is detected.
  tags:
  - ai-ml
  - kubeflow
  - datadog
  - github
  - model-monitoring
capability:
  exposes:
  - type: mcp
    namespace: ml-monitoring
    port: 8080
    tools:
    - name: check-model-drift
      description: Given a Kubeflow experiment and run ID, check model performance metrics, compare against Datadog baselines, and file a GitHub issue on drift.
      inputParameters:
      - name: experiment_id
        in: body
        type: string
        description: The Kubeflow experiment ID.
      - name: run_id
        in: body
        type: string
        description: The Kubeflow pipeline run ID.
      - name: github_repo
        in: body
        type: string
        description: The GitHub repo for filing drift issues (owner/repo).
      steps:
      - name: get-run-metrics
        type: call
        call: kubeflow.get-run
        with:
          experiment_id: '{{experiment_id}}'
          run_id: '{{run_id}}'
      - name: get-baseline
        type: call
        call: datadog.query-metrics
        with:
          query: ml.model.accuracy.baseline{experiment:{{experiment_id}}}
      - name: file-drift-issue
        type: call
        call: github.create-issue
        with:
          repo: '{{github_repo}}'
          title: 'Model drift detected: experiment {{experiment_id}}, run {{run_id}}'
          body: 'Current accuracy: {{get-run-metrics.accuracy}}. Baseline: {{get-baseline.avg_value}}. Drift threshold exceeded. Please investigate retraining.'
  consumes:
  - type: http
    namespace: kubeflow
    baseUri: https://kubeflow.intuit.com/pipeline/apis/v2beta1
    authentication:
      type: bearer
      token: $secrets.kubeflow_token
    resources:
    - name: runs
      path: /experiments/{{experiment_id}}/runs/{{run_id}}
      inputParameters:
      - name: experiment_id
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - 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: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/{{repo}}/issues
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → ml-model-performance-monitor.yml

Generates a profit and loss report from QuickBooks Online for a given date range, returning income, expenses, and net income totals.

naftiko: '0.5'
info:
  label: QuickBooks Profit and Loss Report
  description: Generates a profit and loss report from QuickBooks Online for a given date range, returning income, expenses, and net income totals.
  tags:
  - accounting
  - quickbooks
  - financial-reporting
capability:
  exposes:
  - type: mcp
    namespace: qbo-reports
    port: 8080
    tools:
    - name: get-profit-loss
      description: Given start and end dates, return the QuickBooks profit and loss report with income, expense, and net income totals.
      inputParameters:
      - 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.
      call: qbo.get-profit-loss
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: total_income
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[1].value
      - name: total_expenses
        type: string
        mapping: $.Rows.Row[1].Summary.ColData[1].value
      - name: net_income
        type: string
        mapping: $.Rows.Row[2].Summary.ColData[1].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/ProfitAndLoss
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-profit-loss
        method: GET
Open in Framework → View in Fleet → quickbooks-profit-and-loss-report.yml

Retrieves campaign revenue attribution from Mailchimp for Intuit marketing, returning total revenue, orders, and average order value per campaign.

naftiko: '0.5'
info:
  label: Mailchimp Campaign Revenue Tracker
  description: Retrieves campaign revenue attribution from Mailchimp for Intuit marketing, returning total revenue, orders, and average order value per campaign.
  tags:
  - marketing
  - mailchimp
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: campaign-revenue
    port: 8080
    tools:
    - name: get-campaign-revenue
      description: Retrieve campaign revenue data from Mailchimp.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Mailchimp campaign ID.
      call: mailchimp.get-ecommerce-report
      with:
        campaign_id: '{{campaign_id}}'
      outputParameters:
      - name: total_revenue
        type: string
        mapping: $.ecommerce.total_revenue
      - name: total_orders
        type: number
        mapping: $.ecommerce.total_orders
      - name: avg_order_value
        type: string
        mapping: $.ecommerce.average_order_revenue
  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}}/ecommerce-product-activity
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-ecommerce-report
        method: GET
Open in Framework → View in Fleet → mailchimp-campaign-revenue-tracker.yml

Monitors QuickBooks API health via Datadog, returning uptime percentage, average latency, error rate, and active synthetic checks.

naftiko: '0.5'
info:
  label: Datadog QuickBooks API Monitor
  description: Monitors QuickBooks API health via Datadog, returning uptime percentage, average latency, error rate, and active synthetic checks.
  tags:
  - monitoring
  - datadog
  - quickbooks
capability:
  exposes:
  - type: mcp
    namespace: api-monitoring
    port: 8080
    tools:
    - name: get-api-health
      description: Monitor QuickBooks API health via Datadog.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name.
      call: datadog.get-slo
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: uptime_pct
        type: string
        mapping: $.data.attributes.overall_status[0].sli_value
      - name: avg_latency
        type: string
        mapping: $.data.attributes.latency
      - name: error_rate
        type: string
        mapping: $.data.attributes.error_rate
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: slos
      path: /slo?tags=service:{{service_name}}
      inputParameters:
      - name: service_name
        in: query
      operations:
      - name: get-slo
        method: GET
Open in Framework → View in Fleet → datadog-quickbooks-api-monitor.yml

Takes taxpayer income and withholding data, runs the Intuit tax calculation engine, cross-references with historical refund data, and returns a refund estimate with confidence interval.

naftiko: '0.5'
info:
  label: TurboTax Refund Estimator
  description: Takes taxpayer income and withholding data, runs the Intuit tax calculation engine, cross-references with historical refund data, and returns a refund estimate with confidence interval.
  tags:
  - tax
  - turbotax
  - ai-ml
  - refund-estimation
capability:
  exposes:
  - type: mcp
    namespace: refund-estimator
    port: 8080
    tools:
    - name: estimate-refund
      description: Given income and withholding inputs, calculate estimated refund using the Intuit tax engine and AI confidence model.
      inputParameters:
      - name: taxpayer_id
        in: body
        type: string
        description: The taxpayer profile ID.
      - name: gross_income
        in: body
        type: string
        description: The total gross income.
      - name: federal_withholding
        in: body
        type: string
        description: The total federal tax withheld.
      - name: filing_status
        in: body
        type: string
        description: The filing status (single, married_joint, etc.).
      steps:
      - name: calculate-tax
        type: call
        call: tax-platform.calculate
        with:
          gross_income: '{{gross_income}}'
          withholding: '{{federal_withholding}}'
          filing_status: '{{filing_status}}'
      - name: get-confidence
        type: call
        call: intuit-ai.refund-confidence
        with:
          taxpayer_id: '{{taxpayer_id}}'
          estimated_refund: '{{calculate-tax.refund_amount}}'
          filing_status: '{{filing_status}}'
  consumes:
  - type: http
    namespace: tax-platform
    baseUri: https://tax.api.intuit.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_platform_token
    resources:
    - name: calculate
      path: /calculate
      operations:
      - name: calculate
        method: POST
  - type: http
    namespace: intuit-ai
    baseUri: https://ai.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.intuit_ai_token
    resources:
    - name: refund-confidence
      path: /predict/refund-confidence
      operations:
      - name: refund-confidence
        method: POST
Open in Framework → View in Fleet → turbotax-refund-estimator.yml

Collects email engagement from Mailchimp, social metrics from LinkedIn, and web analytics from Google Analytics, then updates the Salesforce campaign with unified attribution data.

naftiko: '0.5'
info:
  label: Multi-Channel Marketing Attribution
  description: Collects email engagement from Mailchimp, social metrics from LinkedIn, and web analytics from Google Analytics, then updates the Salesforce campaign with unified attribution data.
  tags:
  - marketing
  - mailchimp
  - linkedin
  - google-analytics
  - salesforce
  - attribution
capability:
  exposes:
  - type: mcp
    namespace: marketing-attribution
    port: 8080
    tools:
    - name: aggregate-attribution
      description: Given campaign identifiers across platforms, pull metrics from each channel and update the Salesforce campaign with unified attribution.
      inputParameters:
      - name: mailchimp_campaign_id
        in: body
        type: string
        description: The Mailchimp campaign ID.
      - name: linkedin_campaign_id
        in: body
        type: string
        description: The LinkedIn campaign ID.
      - name: ga_property_id
        in: body
        type: string
        description: The Google Analytics 4 property ID.
      - name: sfdc_campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID.
      steps:
      - name: get-email-metrics
        type: call
        call: mailchimp.get-campaign-report
        with:
          campaign_id: '{{mailchimp_campaign_id}}'
      - name: get-linkedin-metrics
        type: call
        call: linkedin.get-campaign-analytics
        with:
          campaign_id: '{{linkedin_campaign_id}}'
      - name: get-web-metrics
        type: call
        call: ga4.run-report
        with:
          property_id: '{{ga_property_id}}'
      - name: update-sfdc
        type: call
        call: sfdc.update-campaign
        with:
          campaign_id: '{{sfdc_campaign_id}}'
          email_opens: '{{get-email-metrics.opens}}'
          email_clicks: '{{get-email-metrics.clicks}}'
          linkedin_impressions: '{{get-linkedin-metrics.impressions}}'
          linkedin_clicks: '{{get-linkedin-metrics.clicks}}'
          web_sessions: '{{get-web-metrics.sessions}}'
          web_conversions: '{{get-web-metrics.conversions}}'
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $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: linkedin
    baseUri: https://api.linkedin.com/rest
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalytics
      inputParameters:
      - name: campaign_id
        in: query
      operations:
      - name: get-campaign-analytics
        method: GET
  - type: http
    namespace: ga4
    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: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_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

Monitors application error rates via New Relic for Intuit services, returning error percentage, top errors, and affected transaction count.

naftiko: '0.5'
info:
  label: New Relic Error Rate Monitor
  description: Monitors application error rates via New Relic for Intuit services, returning error percentage, top errors, and affected transaction count.
  tags:
  - monitoring
  - new-relic
capability:
  exposes:
  - type: mcp
    namespace: error-monitoring
    port: 8080
    tools:
    - name: get-error-rate
      description: Monitor application error rate via New Relic.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The New Relic application ID.
      call: newrelic.get-errors
      with:
        app_id: '{{app_id}}'
      outputParameters:
      - name: error_rate
        type: string
        mapping: $.metric_data.metrics[0].timeslices[0].values.error_percentage
      - name: count
        type: number
        mapping: $.metric_data.metrics[0].timeslices[0].values.error_count
  consumes:
  - type: http
    namespace: newrelic
    baseUri: https://api.newrelic.com/v2
    authentication:
      type: bearer
      token: $secrets.newrelic_api_key
    resources:
    - name: metrics
      path: /applications/{{app_id}}/metrics/data.json
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-errors
        method: GET
Open in Framework → View in Fleet → new-relic-error-rate-monitor.yml

Queries Prometheus for API gateway latency and error rate metrics, correlates with Datadog APM traces, and posts a health summary to Microsoft Teams.

naftiko: '0.5'
info:
  label: API Gateway Health Dashboard
  description: Queries Prometheus for API gateway latency and error rate metrics, correlates with Datadog APM traces, and posts a health summary to Microsoft Teams.
  tags:
  - platform
  - prometheus
  - datadog
  - microsoft-teams
  - api-management
capability:
  exposes:
  - type: mcp
    namespace: api-health
    port: 8080
    tools:
    - name: check-api-health
      description: Given an API gateway service name, pull latency and error metrics from Prometheus and Datadog, then post a summary to Teams.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The API gateway service identifier.
      - name: teams_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook URL.
      steps:
      - name: get-latency
        type: call
        call: prometheus.query
        with:
          query: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket{service='{{service_name}}'}[5m]))
      - name: get-error-rate
        type: call
        call: datadog.query-metrics
        with:
          query: sum:http.requests.errors{service:{{service_name}}}.as_rate()
      - name: post-summary
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'API Health — {{service_name}}: P99 latency={{get-latency.value}}ms, Error rate={{get-error-rate.avg_value}}/sec.'
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.intuit.com/api/v1
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query
        method: GET
  - 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: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /teams/webhook
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → api-gateway-health-dashboard.yml

Auto-populates Lacerte professional tax preparation forms by importing client financial data from linked accounts, W-2s, and 1099s for accountant review.

naftiko: '0.5'
info:
  label: Lacerte Tax Form Auto-Populator
  description: Auto-populates Lacerte professional tax preparation forms by importing client financial data from linked accounts, W-2s, and 1099s for accountant review.
  tags:
  - tax-preparation
  - lacerte
  - form-automation
capability:
  exposes:
  - type: mcp
    namespace: lacerte-forms
    port: 8080
    tools:
    - name: auto-populate-tax-form
      description: Auto-populate a Lacerte tax form with imported financial data.
      inputParameters:
      - name: client_id
        in: body
        type: string
        description: The Lacerte client identifier.
      - name: tax_year
        in: body
        type: integer
        description: The tax year to prepare.
      - name: form_type
        in: body
        type: string
        description: Tax form type such as 1040, 1120, or 1065.
      call: lacerte-api.populate-form
      with:
        client: '{{client_id}}'
        year: '{{tax_year}}'
        form: '{{form_type}}'
      outputParameters:
      - name: populated_fields
        type: integer
        mapping: $.form.populatedFieldCount
      - name: review_flags
        type: array
        mapping: $.form.reviewFlags
      - name: estimated_refund
        type: number
        mapping: $.form.estimatedRefund
  consumes:
  - type: http
    namespace: lacerte-api
    baseUri: https://api.intuit.com/lacerte/v1
    authentication:
      type: bearer
      token: $secrets.intuit_lacerte_api_token
    resources:
    - name: forms
      path: /clients/{{client}}/tax-forms
      inputParameters:
      - name: client
        in: path
      operations:
      - name: populate-form
        method: POST
Open in Framework → View in Fleet → lacerte-tax-form-auto-populator.yml

Creates a recurring invoice in QuickBooks Online from a template, attaches line items, and sends the invoice to the customer email automatically.

naftiko: '0.5'
info:
  label: QuickBooks Recurring Invoice Generator
  description: Creates a recurring invoice in QuickBooks Online from a template, attaches line items, and sends the invoice to the customer email automatically.
  tags:
  - accounting
  - quickbooks
  - invoicing
  - automation
capability:
  exposes:
  - type: mcp
    namespace: recurring-invoicing
    port: 8080
    tools:
    - name: create-and-send-invoice
      description: Given customer and line item details, create a QuickBooks invoice and send it to the customer.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The QuickBooks customer ID.
      - name: line_items
        in: body
        type: string
        description: JSON array of line items with item_id, quantity, and unit_price.
      - name: due_days
        in: body
        type: string
        description: Number of days until invoice is due.
      steps:
      - name: create-invoice
        type: call
        call: qbo.create-invoice
        with:
          customer_id: '{{customer_id}}'
          line_items: '{{line_items}}'
          due_days: '{{due_days}}'
      - name: send-invoice
        type: call
        call: qbo.send-invoice
        with:
          invoice_id: '{{create-invoice.Invoice_Id}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: invoices
      path: /invoice
      operations:
      - name: create-invoice
        method: POST
    - name: invoice-send
      path: /invoice/{{invoice_id}}/send
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: send-invoice
        method: POST
Open in Framework → View in Fleet → quickbooks-recurring-invoice-generator.yml

Retrieves a Salesforce account by ID including name, industry, annual revenue, and owner details for CRM integration.

naftiko: '0.5'
info:
  label: Salesforce Account Lookup
  description: Retrieves a Salesforce account by ID including name, industry, annual revenue, and owner details for CRM integration.
  tags:
  - sales
  - salesforce
  - crm
capability:
  exposes:
  - type: mcp
    namespace: sfdc-accounts
    port: 8080
    tools:
    - name: get-account
      description: Given a Salesforce account ID, return the account name, industry, annual revenue, and owner name.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      call: sfdc.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
  consumes:
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_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 budget versus actual comparison report from QuickBooks Online, highlighting variances across income and expense categories for a specified fiscal period.

naftiko: '0.5'
info:
  label: QuickBooks Budget vs Actual Report
  description: Generates a budget versus actual comparison report from QuickBooks Online, highlighting variances across income and expense categories for a specified fiscal period.
  tags:
  - accounting
  - quickbooks
  - budgeting
capability:
  exposes:
  - type: mcp
    namespace: qbo-budgeting
    port: 8080
    tools:
    - name: get-budget-vs-actual
      description: Retrieve a budget versus actual variance report for a given fiscal period from QuickBooks Online.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks Online company realm ID.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period to report on, such as 2026-Q1.
      call: qbo.get-budget-report
      with:
        realm_id: '{{realm_id}}'
        period: '{{fiscal_period}}'
      outputParameters:
      - name: total_budgeted_income
        type: string
        mapping: $.Report.Rows.budgetedIncome
      - name: total_actual_income
        type: string
        mapping: $.Report.Rows.actualIncome
      - name: total_budgeted_expense
        type: string
        mapping: $.Report.Rows.budgetedExpense
      - name: total_actual_expense
        type: string
        mapping: $.Report.Rows.actualExpense
      - name: net_variance
        type: string
        mapping: $.Report.Rows.netVariance
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: budget-report
      path: /reports/BudgetSummary
      inputParameters:
      - name: fiscal_period
        in: query
      operations:
      - name: get-budget-report
        method: GET
Open in Framework → View in Fleet → quickbooks-budget-vs-actual-report.yml

Queries Prometheus for service health metrics across Intuit platform, returning request rate, error rate, and latency percentiles.

naftiko: '0.5'
info:
  label: Prometheus Service Metrics Query
  description: Queries Prometheus for service health metrics across Intuit platform, returning request rate, error rate, and latency percentiles.
  tags:
  - monitoring
  - prometheus
capability:
  exposes:
  - type: mcp
    namespace: service-metrics
    port: 8080
    tools:
    - name: query-metrics
      description: Query service metrics from Prometheus.
      inputParameters:
      - name: service
        in: body
        type: string
        description: The service name.
      - name: query
        in: body
        type: string
        description: The PromQL query.
      call: prometheus.query
      with:
        service: '{{service}}'
        query: '{{query}}'
      outputParameters:
      - name: value
        type: string
        mapping: $.data.result[0].value[1]
      - name: metric
        type: string
        mapping: $.data.result[0].metric.__name__
  consumes:
  - type: http
    namespace: prometheus
    baseUri: https://prometheus.intuit.com
    authentication:
      type: bearer
      token: $secrets.prometheus_token
    resources:
    - name: queries
      path: /api/v1/query
      operations:
      - name: query
        method: GET
Open in Framework → View in Fleet → prometheus-service-metrics-query.yml

Manages the ProConnect Tax Online client document exchange portal, enabling secure upload, review, and e-signature workflows between tax professionals and their clients.

naftiko: '0.5'
info:
  label: ProConnect Client Document Portal
  description: Manages the ProConnect Tax Online client document exchange portal, enabling secure upload, review, and e-signature workflows between tax professionals and their clients.
  tags:
  - tax-preparation
  - proconnect
  - document-management
capability:
  exposes:
  - type: mcp
    namespace: proconnect-documents
    port: 8080
    tools:
    - name: manage-client-documents
      description: Upload or retrieve client tax documents through the ProConnect portal.
      inputParameters:
      - name: firm_id
        in: body
        type: string
        description: The tax firm identifier.
      - name: client_id
        in: body
        type: string
        description: The client identifier.
      - name: document_type
        in: body
        type: string
        description: Document type such as w2, 1099, or engagement-letter.
      call: proconnect-api.manage-documents
      with:
        firm: '{{firm_id}}'
        client: '{{client_id}}'
        type: '{{document_type}}'
      outputParameters:
      - name: document_id
        type: string
        mapping: $.document.id
      - name: upload_status
        type: string
        mapping: $.document.status
      - name: signature_required
        type: boolean
        mapping: $.document.signatureRequired
  consumes:
  - type: http
    namespace: proconnect-api
    baseUri: https://api.intuit.com/proconnect/v1
    authentication:
      type: bearer
      token: $secrets.intuit_proconnect_api_token
    resources:
    - name: documents
      path: /firms/{{firm}}/clients/{{client}}/documents
      inputParameters:
      - name: firm
        in: path
      - name: client
        in: path
      operations:
      - name: manage-documents
        method: POST
Open in Framework → View in Fleet → proconnect-client-document-portal.yml

Matches TurboTax Live customers with qualified tax experts based on tax situation complexity, language preferences, and expert availability for real-time consultations.

naftiko: '0.5'
info:
  label: TurboTax Live Expert Matching Orchestrator
  description: Matches TurboTax Live customers with qualified tax experts based on tax situation complexity, language preferences, and expert availability for real-time consultations.
  tags:
  - turbotax
  - expert-matching
  - tax-consultation
capability:
  exposes:
  - type: mcp
    namespace: expert-matching
    port: 8080
    tools:
    - name: match-tax-expert
      description: Match a customer with an available TurboTax Live tax expert.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The TurboTax customer identifier.
      - name: tax_situation
        in: body
        type: string
        description: Tax situation category such as self-employed, investments, or rental-income.
      - name: language_preference
        in: body
        type: string
        description: Preferred language for the consultation.
      call: ttlive-api.match-expert
      with:
        customer: '{{customer_id}}'
        situation: '{{tax_situation}}'
        language: '{{language_preference}}'
      outputParameters:
      - name: expert_id
        type: string
        mapping: $.match.expertId
      - name: expert_name
        type: string
        mapping: $.match.expertName
      - name: estimated_wait_time
        type: integer
        mapping: $.match.estimatedWaitMinutes
  consumes:
  - type: http
    namespace: ttlive-api
    baseUri: https://api.intuit.com/turbotax-live/v1
    authentication:
      type: bearer
      token: $secrets.intuit_ttlive_api_token
    resources:
    - name: expert-matches
      path: /expert-matching
      operations:
      - name: match-expert
        method: POST
Open in Framework → View in Fleet → turbotax-live-expert-matching-orchestrator.yml

Takes a natural language bookkeeping question from a small business owner, retrieves relevant QuickBooks data, sends to Anthropic Claude for interpretation, and returns a plain-English answer.

naftiko: '0.5'
info:
  label: Anthropic-Powered Bookkeeping Assistant
  description: Takes a natural language bookkeeping question from a small business owner, retrieves relevant QuickBooks data, sends to Anthropic Claude for interpretation, and returns a plain-English answer.
  tags:
  - ai-ml
  - anthropic
  - quickbooks
  - small-business
  - bookkeeping
capability:
  exposes:
  - type: mcp
    namespace: bookkeeping-assistant
    port: 8080
    tools:
    - name: ask-bookkeeping
      description: Given a natural language question and QuickBooks realm ID, pull relevant financial data and generate an AI-powered answer via Anthropic Claude.
      inputParameters:
      - name: question
        in: body
        type: string
        description: The bookkeeping question in natural language.
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks company realm ID.
      steps:
      - name: get-pnl
        type: call
        call: qbo.get-profit-loss-ytd
        with:
          realm_id: '{{realm_id}}'
      - name: get-balance
        type: call
        call: qbo.get-balance-sheet-current
        with:
          realm_id: '{{realm_id}}'
      - name: generate-answer
        type: call
        call: anthropic.create-message
        with:
          model: claude-sonnet-4-20250514
          system: You are an expert bookkeeper for small businesses. Use the provided QuickBooks financial data to answer accurately and in plain English.
          context_pnl: '{{get-pnl.report_data}}'
          context_balance: '{{get-balance.report_data}}'
          user_message: '{{question}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: profit-loss
      path: /reports/ProfitAndLoss
      inputParameters:
      - name: date_macro
        in: query
        value: This Year-to-date
      operations:
      - name: get-profit-loss-ytd
        method: GET
    - name: balance-sheet
      path: /reports/BalanceSheet
      inputParameters:
      - name: date_macro
        in: query
        value: Today
      operations:
      - name: get-balance-sheet-current
        method: GET
  - type: http
    namespace: anthropic
    baseUri: https://api.anthropic.com/v1
    authentication:
      type: bearer
      token: $secrets.anthropic_api_key
    inputParameters:
    - name: anthropic-version
      in: header
      value: '2023-06-01'
    resources:
    - name: messages
      path: /messages
      operations:
      - name: create-message
        method: POST
Open in Framework → View in Fleet → anthropic-powered-bookkeeping-assistant.yml

Takes a taxpayer question, retrieves relevant tax code context from Elasticsearch, sends to OpenAI for answer generation, and logs the interaction in Salesforce for compliance.

naftiko: '0.5'
info:
  label: OpenAI-Powered Tax Guidance Generator
  description: Takes a taxpayer question, retrieves relevant tax code context from Elasticsearch, sends to OpenAI for answer generation, and logs the interaction in Salesforce for compliance.
  tags:
  - tax
  - turbotax
  - openai
  - elasticsearch
  - salesforce
  - ai-ml
capability:
  exposes:
  - type: mcp
    namespace: tax-guidance
    port: 8080
    tools:
    - name: generate-tax-guidance
      description: Given a taxpayer question and return context, search tax knowledge base, generate AI guidance via OpenAI, and log to Salesforce.
      inputParameters:
      - name: question
        in: body
        type: string
        description: The taxpayer's tax question.
      - name: taxpayer_id
        in: body
        type: string
        description: The taxpayer profile ID for logging.
      - name: tax_year
        in: body
        type: string
        description: The tax year for context.
      steps:
      - name: search-tax-code
        type: call
        call: elasticsearch.search-tax-kb
        with:
          query: '{{question}}'
          tax_year: '{{tax_year}}'
      - name: generate-answer
        type: call
        call: openai.chat-completion
        with:
          model: gpt-4
          system_prompt: You are an Intuit tax expert. Use the following tax code references to answer accurately.
          context: '{{search-tax-code.results}}'
          user_message: '{{question}}'
      - name: log-interaction
        type: call
        call: sfdc.create-task
        with:
          subject: 'Tax guidance provided: {{taxpayer_id}}'
          description: 'Question: {{question}}. AI response generated. Tax year: {{tax_year}}. Sources: {{search-tax-code.source_count}} references.'
          type: Tax_Guidance_Log
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://es.intuit.com
    authentication:
      type: bearer
      token: $secrets.elasticsearch_token
    resources:
    - name: tax-knowledge
      path: /tax-knowledge-base/_search
      operations:
      - name: search-tax-kb
        method: POST
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat
      path: /chat/completions
      operations:
      - name: chat-completion
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → openai-powered-tax-guidance-generator.yml

Retrieves payment details from QuickBooks Online by payment ID, returning amount, date, payment method, and linked invoice.

naftiko: '0.5'
info:
  label: QuickBooks Payment Lookup
  description: Retrieves payment details from QuickBooks Online by payment ID, returning amount, date, payment method, and linked invoice.
  tags:
  - accounting
  - quickbooks
  - payments
capability:
  exposes:
  - type: mcp
    namespace: qbo-payments
    port: 8080
    tools:
    - name: get-payment
      description: Given a QuickBooks payment ID, return the payment amount, date, method, and associated invoice reference.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The QuickBooks Online payment ID.
      call: qbo.get-payment
      with:
        payment_id: '{{payment_id}}'
      outputParameters:
      - name: total_amount
        type: string
        mapping: $.Payment.TotalAmt
      - name: txn_date
        type: string
        mapping: $.Payment.TxnDate
      - name: payment_method
        type: string
        mapping: $.Payment.PaymentMethodRef.name
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: payments
      path: /payment/{{payment_id}}
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-payment
        method: GET
Open in Framework → View in Fleet → quickbooks-payment-lookup.yml

Extracts structured data from receipt images using OpenAI, returning vendor name, total amount, line items, and transaction date for QuickBooks integration.

naftiko: '0.5'
info:
  label: OpenAI Receipt Extraction Service
  description: Extracts structured data from receipt images using OpenAI, returning vendor name, total amount, line items, and transaction date for QuickBooks integration.
  tags:
  - machine-learning
  - openai
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: receipt-extraction
    port: 8080
    tools:
    - name: extract-receipt
      description: Extract data from a receipt image using OpenAI.
      inputParameters:
      - name: image_url
        in: body
        type: string
        description: The receipt image URL.
      call: openai.extract-receipt
      with:
        image_url: '{{image_url}}'
      outputParameters:
      - name: vendor
        type: string
        mapping: $.choices[0].message.content.vendor
      - name: total
        type: string
        mapping: $.choices[0].message.content.total
      - name: date
        type: string
        mapping: $.choices[0].message.content.date
  consumes:
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: completions
      path: /chat/completions
      operations:
      - name: extract-receipt
        method: POST
Open in Framework → View in Fleet → openai-receipt-extraction-service.yml

Triggers a Harness continuous delivery pipeline, monitors the deployment status, and posts the result to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Harness Deployment Trigger
  description: Triggers a Harness continuous delivery pipeline, monitors the deployment status, and posts the result to a Microsoft Teams channel.
  tags:
  - engineering
  - harness
  - microsoft-teams
  - ci-cd
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: harness-deploy
    port: 8080
    tools:
    - name: trigger-and-monitor
      description: Given a Harness pipeline ID and environment, trigger the deployment, check status, and notify Teams.
      inputParameters:
      - name: pipeline_id
        in: body
        type: string
        description: The Harness pipeline identifier.
      - name: org_id
        in: body
        type: string
        description: The Harness organization ID.
      - name: project_id
        in: body
        type: string
        description: The Harness project ID.
      - name: teams_webhook
        in: body
        type: string
        description: The Microsoft Teams webhook URL.
      steps:
      - name: trigger-pipeline
        type: call
        call: harness.execute-pipeline
        with:
          org_id: '{{org_id}}'
          project_id: '{{project_id}}'
          pipeline_id: '{{pipeline_id}}'
      - name: get-execution
        type: call
        call: harness.get-execution
        with:
          org_id: '{{org_id}}'
          project_id: '{{project_id}}'
          execution_id: '{{trigger-pipeline.execution_id}}'
      - name: notify-team
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'Deployment {{pipeline_id}}: {{get-execution.status}}. Execution: {{trigger-pipeline.execution_id}}. Duration: {{get-execution.duration_ms}}ms.'
  consumes:
  - type: http
    namespace: harness
    baseUri: https://app.harness.io/pipeline/api
    authentication:
      type: bearer
      token: $secrets.harness_api_key
    resources:
    - name: pipelines
      path: /pipelines/execute/{{pipeline_id}}
      inputParameters:
      - name: pipeline_id
        in: path
      - name: accountIdentifier
        in: query
        value: $secrets.harness_account_id
      - name: orgIdentifier
        in: query
      - name: projectIdentifier
        in: query
      operations:
      - name: execute-pipeline
        method: POST
    - name: executions
      path: /pipelines/execution/{{execution_id}}
      inputParameters:
      - name: execution_id
        in: path
      - name: accountIdentifier
        in: query
        value: $secrets.harness_account_id
      - name: orgIdentifier
        in: query
      - name: projectIdentifier
        in: query
      operations:
      - name: get-execution
        method: GET
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: webhooks
      path: /teams/webhook
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → harness-deployment-trigger.yml

Orchestrates tax document collection by checking required forms in the tax engine, requesting missing documents via email, tracking upload status, and creating audit trail in Salesforce.

naftiko: '0.5'
info:
  label: Tax Document Collection Orchestrator
  description: Orchestrates tax document collection by checking required forms in the tax engine, requesting missing documents via email, tracking upload status, and creating audit trail in Salesforce.
  tags:
  - tax
  - turbotax
  - salesforce
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: tax-documents
    port: 8080
    tools:
    - name: collect-documents
      description: Orchestrate tax document collection for a return.
      inputParameters:
      - name: return_id
        in: body
        type: string
        description: The tax return ID.
      - name: taxpayer_email
        in: body
        type: string
        description: Taxpayer email address.
      steps:
      - name: check-requirements
        type: call
        call: tax-platform.check-documents
        with:
          return_id: '{{return_id}}'
      - name: request-missing
        type: call
        call: email-service.send-document-request
        with:
          to: '{{taxpayer_email}}'
          missing_docs: '{{check-requirements.missing_documents}}'
          return_id: '{{return_id}}'
      - name: create-tracking
        type: call
        call: sfdc.create-task
        with:
          subject: 'Document collection: Return {{return_id}}'
          description: 'Missing documents: {{check-requirements.missing_count}}. Request sent to {{taxpayer_email}}.'
          priority: Medium
  consumes:
  - type: http
    namespace: tax-platform
    baseUri: https://tax.api.intuit.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_platform_token
    resources:
    - name: documents
      path: /returns/{{return_id}}/documents/check
      inputParameters:
      - name: return_id
        in: path
      operations:
      - name: check-documents
        method: GET
  - type: http
    namespace: email-service
    baseUri: https://email.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.email_service_token
    resources:
    - name: emails
      path: /send
      operations:
      - name: send-document-request
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → tax-document-collection-orchestrator.yml

Orchestrates annual tax planning by pulling year-to-date financials from QuickBooks, estimating tax liability via the tax engine, generating optimization recommendations, and notifying the customer via Mailchimp.

naftiko: '0.5'
info:
  label: Annual Tax Planning Orchestrator
  description: Orchestrates annual tax planning by pulling year-to-date financials from QuickBooks, estimating tax liability via the tax engine, generating optimization recommendations, and notifying the customer via Mailchimp.
  tags:
  - tax
  - quickbooks
  - financial-planning
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: tax-planning
    port: 8080
    tools:
    - name: generate-tax-plan
      description: Generate an annual tax plan for a small business.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks realm ID.
      - name: customer_email
        in: body
        type: string
        description: The customer email.
      steps:
      - name: get-ytd-financials
        type: call
        call: qbo.get-profit-loss
        with:
          realm_id: '{{realm_id}}'
      - name: estimate-tax
        type: call
        call: tax-platform.estimate-liability
        with:
          income: '{{get-ytd-financials.total_income}}'
          deductions: '{{get-ytd-financials.total_expenses}}'
      - name: get-recommendations
        type: call
        call: tax-platform.optimize
        with:
          estimated_tax: '{{estimate-tax.estimated_liability}}'
          income: '{{get-ytd-financials.total_income}}'
      - name: send-plan
        type: call
        call: mailchimp.send-transactional
        with:
          to: '{{customer_email}}'
          template: tax_planning_report
          variables: '{{estimate-tax.estimated_liability}},{{get-recommendations.potential_savings}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/ProfitAndLoss?date_macro=This Year
      operations:
      - name: get-profit-loss
        method: GET
  - type: http
    namespace: tax-platform
    baseUri: https://tax.api.intuit.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_platform_token
    resources:
    - name: estimates
      path: /estimate
      operations:
      - name: estimate-liability
        method: POST
    - name: optimization
      path: /optimize
      operations:
      - name: optimize
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mandrill_api_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → annual-tax-planning-orchestrator.yml

Orchestrates subscriber re-engagement by identifying inactive users in Mailchimp, creating a win-back campaign, sending targeted emails, and tracking conversion in Salesforce.

naftiko: '0.5'
info:
  label: Mailchimp Subscriber Engagement Orchestrator
  description: Orchestrates subscriber re-engagement by identifying inactive users in Mailchimp, creating a win-back campaign, sending targeted emails, and tracking conversion in Salesforce.
  tags:
  - marketing
  - mailchimp
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: subscriber-engagement
    port: 8080
    tools:
    - name: run-engagement-campaign
      description: Run a subscriber re-engagement campaign.
      inputParameters:
      - name: list_id
        in: body
        type: string
        description: The Mailchimp list ID.
      - name: inactive_days
        in: body
        type: number
        description: Days of inactivity threshold.
      steps:
      - name: find-inactive
        type: call
        call: mailchimp.get-inactive-members
        with:
          list_id: '{{list_id}}'
          inactive_days: '{{inactive_days}}'
      - name: create-campaign
        type: call
        call: mailchimp.create-campaign
        with:
          list_id: '{{list_id}}'
          segment_id: '{{find-inactive.segment_id}}'
          subject: We miss you! Special offer inside
      - name: track-in-crm
        type: call
        call: sfdc.create-campaign
        with:
          name: 'Re-engagement: {{find-inactive.inactive_count}} subscribers'
          status: Planned
          expected_response: '15'
  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: members
      path: /lists/{{list_id}}/members
      inputParameters:
      - name: list_id
        in: path
      operations:
      - name: get-inactive-members
        method: GET
    - name: campaigns
      path: /campaigns
      operations:
      - name: create-campaign
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: campaigns
      path: /sobjects/Campaign
      operations:
      - name: create-campaign
        method: POST
Open in Framework → View in Fleet → mailchimp-subscriber-engagement-orchestrator.yml

Manages employee direct deposit enrollment for QuickBooks Payroll, handling bank account verification, split deposit configurations, and compliance validations.

naftiko: '0.5'
info:
  label: QuickBooks Payroll Direct Deposit Enrollment
  description: Manages employee direct deposit enrollment for QuickBooks Payroll, handling bank account verification, split deposit configurations, and compliance validations.
  tags:
  - payroll
  - direct-deposit
  - employee-management
capability:
  exposes:
  - type: mcp
    namespace: payroll-direct-deposit
    port: 8080
    tools:
    - name: enroll-direct-deposit
      description: Enroll or update an employee direct deposit configuration.
      inputParameters:
      - name: company_id
        in: body
        type: string
        description: The QuickBooks company identifier.
      - name: employee_id
        in: body
        type: string
        description: The employee identifier.
      - name: routing_number
        in: body
        type: string
        description: Bank routing number for deposit.
      call: payroll-api.enroll-direct-deposit
      with:
        company: '{{company_id}}'
        employee: '{{employee_id}}'
        routing: '{{routing_number}}'
      outputParameters:
      - name: enrollment_status
        type: string
        mapping: $.enrollment.status
      - name: verification_method
        type: string
        mapping: $.enrollment.verificationMethod
      - name: effective_date
        type: string
        mapping: $.enrollment.effectiveDate
  consumes:
  - type: http
    namespace: payroll-api
    baseUri: https://api.intuit.com/quickbooks-payroll/v1
    authentication:
      type: bearer
      token: $secrets.intuit_payroll_api_token
    resources:
    - name: direct-deposits
      path: /companies/{{company}}/employees/{{employee}}/direct-deposit
      inputParameters:
      - name: company
        in: path
      - name: employee
        in: path
      operations:
      - name: enroll-direct-deposit
        method: POST
Open in Framework → View in Fleet → quickbooks-payroll-direct-deposit-enrollment.yml

Processes a small business loan application by retrieving financial data from QuickBooks, running credit assessment, generating loan terms, and notifying the applicant via email.

naftiko: '0.5'
info:
  label: Small Business Loan Application Orchestrator
  description: Processes a small business loan application by retrieving financial data from QuickBooks, running credit assessment, generating loan terms, and notifying the applicant via email.
  tags:
  - lending
  - quickbooks
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: smb-lending
    port: 8080
    tools:
    - name: process-loan-application
      description: Process a small business loan application.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks company realm ID.
      - name: requested_amount
        in: body
        type: string
        description: Requested loan amount.
      steps:
      - name: get-financials
        type: call
        call: qbo.get-profit-loss
        with:
          realm_id: '{{realm_id}}'
      - name: assess-credit
        type: call
        call: lending-engine.assess
        with:
          revenue: '{{get-financials.total_income}}'
          expenses: '{{get-financials.total_expenses}}'
          requested_amount: '{{requested_amount}}'
      - name: generate-terms
        type: call
        call: lending-engine.generate-terms
        with:
          risk_score: '{{assess-credit.risk_score}}'
          amount: '{{requested_amount}}'
      - name: create-case
        type: call
        call: sfdc.create-case
        with:
          subject: SMB Loan Application - Realm {{realm_id}}
          description: 'Requested: {{requested_amount}}. Risk score: {{assess-credit.risk_score}}. Offered rate: {{generate-terms.interest_rate}}.'
          type: Lending_Application
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/ProfitAndLoss
      operations:
      - name: get-profit-loss
        method: GET
  - type: http
    namespace: lending-engine
    baseUri: https://lending.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.lending_engine_token
    resources:
    - name: assessment
      path: /assess
      operations:
      - name: assess
        method: POST
    - name: terms
      path: /terms
      operations:
      - name: generate-terms
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
Open in Framework → View in Fleet → small-business-loan-application-orchestrator.yml

Assesses small business financial health by pulling key ratios from QuickBooks, checking credit score via the lending engine, generating a health report, and sending insights via Mailchimp.

naftiko: '0.5'
info:
  label: SMB Financial Health Assessment Pipeline
  description: Assesses small business financial health by pulling key ratios from QuickBooks, checking credit score via the lending engine, generating a health report, and sending insights via Mailchimp.
  tags:
  - financial-wellness
  - quickbooks
  - mailchimp
capability:
  exposes:
  - type: mcp
    namespace: financial-health
    port: 8080
    tools:
    - name: assess-health
      description: Assess small business financial health.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks realm ID.
      - name: customer_email
        in: body
        type: string
        description: Business owner email.
      steps:
      - name: get-financials
        type: call
        call: qbo.get-key-ratios
        with:
          realm_id: '{{realm_id}}'
      - name: check-credit
        type: call
        call: lending-engine.get-business-score
        with:
          realm_id: '{{realm_id}}'
      - name: generate-report
        type: call
        call: health-engine.create-assessment
        with:
          current_ratio: '{{get-financials.current_ratio}}'
          debt_ratio: '{{get-financials.debt_ratio}}'
          credit_score: '{{check-credit.score}}'
      - name: send-insights
        type: call
        call: mailchimp.send-transactional
        with:
          to: '{{customer_email}}'
          template: financial_health_report
          variables: '{{generate-report.health_grade}},{{generate-report.recommendations}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/BalanceSheet
      operations:
      - name: get-key-ratios
        method: GET
  - type: http
    namespace: lending-engine
    baseUri: https://lending.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.lending_engine_token
    resources:
    - name: scores
      path: /business-score
      operations:
      - name: get-business-score
        method: POST
  - type: http
    namespace: health-engine
    baseUri: https://financial-health.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.health_engine_token
    resources:
    - name: assessments
      path: /assess
      operations:
      - name: create-assessment
        method: POST
  - type: http
    namespace: mailchimp
    baseUri: https://mandrillapp.com/api/1.0
    authentication:
      type: bearer
      token: $secrets.mandrill_api_key
    resources:
    - name: messages
      path: /messages/send-template
      operations:
      - name: send-transactional
        method: POST
Open in Framework → View in Fleet → smb-financial-health-assessment-pipeline.yml

Retrieves tax summary report from QuickBooks Online, returning sales tax collected, sales tax paid, and net tax liability by tax agency.

naftiko: '0.5'
info:
  label: QuickBooks Tax Summary Report
  description: Retrieves tax summary report from QuickBooks Online, returning sales tax collected, sales tax paid, and net tax liability by tax agency.
  tags:
  - tax
  - quickbooks
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: qbo-tax-summary
    port: 8080
    tools:
    - name: get-tax-summary
      description: Retrieve tax summary from QuickBooks Online.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Report start date.
      - name: end_date
        in: body
        type: string
        description: Report end date.
      call: qbo.get-tax-summary
      with:
        start_date: '{{start_date}}'
        end_date: '{{end_date}}'
      outputParameters:
      - name: tax_collected
        type: string
        mapping: $.Rows.Row[0].Summary.ColData[1].value
      - name: tax_paid
        type: string
        mapping: $.Rows.Row[1].Summary.ColData[1].value
      - name: net_liability
        type: string
        mapping: $.Rows.Row[2].Summary.ColData[1].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/TaxSummary?start_date={{start_date}}&end_date={{end_date}}
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-tax-summary
        method: GET
Open in Framework → View in Fleet → quickbooks-tax-summary-report.yml

Checks service health in Consul for Intuit microservices, returning service status, node count, and failing checks.

naftiko: '0.5'
info:
  label: Consul Service Health Check
  description: Checks service health in Consul for Intuit microservices, returning service status, node count, and failing checks.
  tags:
  - infrastructure
  - consul
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: service-health
    port: 8080
    tools:
    - name: check-service-health
      description: Check service health in Consul.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Consul service name.
      call: consul.get-health
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $[0].Checks[0].Status
      - name: node
        type: string
        mapping: $[0].Node.Node
      - name: service_port
        type: number
        mapping: $[0].Service.Port
  consumes:
  - type: http
    namespace: consul
    baseUri: https://consul.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.consul_token
    resources:
    - name: health
      path: /health/service/{{service_name}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-health
        method: GET
Open in Framework → View in Fleet → consul-service-health-check.yml

Retrieves purchase order details from QuickBooks Online, returning vendor name, order amount, status, and expected delivery date.

naftiko: '0.5'
info:
  label: QuickBooks Purchase Order Lookup
  description: Retrieves purchase order details from QuickBooks Online, returning vendor name, order amount, status, and expected delivery date.
  tags:
  - accounting
  - quickbooks
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: qbo-purchase-orders
    port: 8080
    tools:
    - name: get-purchase-order
      description: Look up a purchase order in QuickBooks.
      inputParameters:
      - name: po_id
        in: body
        type: string
        description: The purchase order ID.
      call: qbo.get-po
      with:
        po_id: '{{po_id}}'
      outputParameters:
      - name: vendor
        type: string
        mapping: $.PurchaseOrder.VendorRef.name
      - name: total
        type: string
        mapping: $.PurchaseOrder.TotalAmt
      - name: status
        type: string
        mapping: $.PurchaseOrder.POStatus
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: purchase-orders
      path: /purchaseorder/{{po_id}}
      inputParameters:
      - name: po_id
        in: path
      operations:
      - name: get-po
        method: GET
Open in Framework → View in Fleet → quickbooks-purchase-order-lookup.yml

Retrieves user session details from Keycloak for Intuit identity management, returning active sessions, last login, and client connections.

naftiko: '0.5'
info:
  label: Keycloak User Session Lookup
  description: Retrieves user session details from Keycloak for Intuit identity management, returning active sessions, last login, and client connections.
  tags:
  - security
  - keycloak
  - identity
capability:
  exposes:
  - type: mcp
    namespace: user-sessions
    port: 8080
    tools:
    - name: get-sessions
      description: Look up user sessions in Keycloak.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Keycloak user ID.
      call: keycloak.get-sessions
      with:
        user_id: '{{user_id}}'
      outputParameters:
      - name: active_sessions
        type: number
        mapping: $.length
      - name: last_access
        type: string
        mapping: $[0].lastAccess
      - name: client_id
        type: string
        mapping: $[0].clients.keys[0]
  consumes:
  - type: http
    namespace: keycloak
    baseUri: https://auth.intuit.com/admin/realms/intuit
    authentication:
      type: bearer
      token: $secrets.keycloak_admin_token
    resources:
    - name: sessions
      path: /users/{{user_id}}/sessions
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-sessions
        method: GET
Open in Framework → View in Fleet → keycloak-user-session-lookup.yml

Retrieves accounts payable aging report from QuickBooks Online, returning current, 30-day, 60-day, and 90+ day outstanding vendor balances.

naftiko: '0.5'
info:
  label: QuickBooks Accounts Payable Aging
  description: Retrieves accounts payable aging report from QuickBooks Online, returning current, 30-day, 60-day, and 90+ day outstanding vendor balances.
  tags:
  - accounting
  - quickbooks
  - payables
capability:
  exposes:
  - type: mcp
    namespace: qbo-payables
    port: 8080
    tools:
    - name: get-ap-aging
      description: Retrieve AP aging report from QuickBooks Online.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks realm ID.
      call: qbo.get-ap-aging
      with:
        realm_id: '{{realm_id}}'
      outputParameters:
      - name: current
        type: string
        mapping: $.Rows.Row[0].ColData[1].value
      - name: days_30
        type: string
        mapping: $.Rows.Row[0].ColData[2].value
      - name: days_90_plus
        type: string
        mapping: $.Rows.Row[0].ColData[4].value
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/AgedPayables
      operations:
      - name: get-ap-aging
        method: GET
Open in Framework → View in Fleet → quickbooks-accounts-payable-aging.yml

Retrieves employee details from QuickBooks Online payroll, returning employee name, hire date, pay rate, and employment status.

naftiko: '0.5'
info:
  label: QuickBooks Employee Lookup
  description: Retrieves employee details from QuickBooks Online payroll, returning employee name, hire date, pay rate, and employment status.
  tags:
  - payroll
  - quickbooks
  - hr
capability:
  exposes:
  - type: mcp
    namespace: qbo-employees
    port: 8080
    tools:
    - name: get-employee
      description: Look up an employee in QuickBooks Online.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The QuickBooks employee ID.
      call: qbo.get-employee
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.Employee.DisplayName
      - name: hire_date
        type: string
        mapping: $.Employee.HiredDate
      - name: active
        type: string
        mapping: $.Employee.Active
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: employees
      path: /employee/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-employee
        method: GET
Open in Framework → View in Fleet → quickbooks-employee-lookup.yml

Pulls financial data from QuickBooks, runs a credit risk assessment through the Intuit AI engine, and creates a Salesforce lead for the lending team if the business qualifies.

naftiko: '0.5'
info:
  label: Small Business Lending Pre-Qualification
  description: Pulls financial data from QuickBooks, runs a credit risk assessment through the Intuit AI engine, and creates a Salesforce lead for the lending team if the business qualifies.
  tags:
  - small-business
  - quickbooks
  - ai-ml
  - lending
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: lending-prequalification
    port: 8080
    tools:
    - name: prequalify-business
      description: Given a QuickBooks realm ID, pull financials, run AI credit assessment, and create a Salesforce lead for qualified businesses.
      inputParameters:
      - name: realm_id
        in: body
        type: string
        description: The QuickBooks company realm ID.
      - name: business_name
        in: body
        type: string
        description: The business name for the lending lead.
      - name: contact_email
        in: body
        type: string
        description: The business owner contact email.
      steps:
      - name: get-financials
        type: call
        call: qbo.get-profit-loss
        with:
          start_date: '2025-01-01'
          end_date: '2025-12-31'
      - name: assess-credit
        type: call
        call: intuit-ai.assess-credit
        with:
          revenue: '{{get-financials.total_income}}'
          expenses: '{{get-financials.total_expenses}}'
          net_income: '{{get-financials.net_income}}'
      - name: create-lending-lead
        type: call
        call: sfdc.create-lead
        with:
          company: '{{business_name}}'
          email: '{{contact_email}}'
          lead_source: QuickBooks_Lending
          description: 'Pre-qualified: credit score {{assess-credit.score}}/100. Annual revenue: {{get-financials.total_income}}. Net income: {{get-financials.net_income}}. Risk tier: {{assess-credit.risk_tier}}.'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/ProfitAndLoss
      inputParameters:
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: get-profit-loss
        method: GET
  - type: http
    namespace: intuit-ai
    baseUri: https://ai.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.intuit_ai_token
    resources:
    - name: credit
      path: /assess/credit
      operations:
      - name: assess-credit
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: create-lead
        method: POST
Open in Framework → View in Fleet → small-business-lending-pre-qualification.yml

Retrieves trial balance report from QuickBooks Online, returning total debits, total credits, and account-level balances for period-end close.

naftiko: '0.5'
info:
  label: QuickBooks Trial Balance Lookup
  description: Retrieves trial balance report from QuickBooks Online, returning total debits, total credits, and account-level balances for period-end close.
  tags:
  - accounting
  - quickbooks
capability:
  exposes:
  - type: mcp
    namespace: qbo-trial-balance
    port: 8080
    tools:
    - name: get-trial-balance
      description: Retrieve trial balance from QuickBooks Online.
      inputParameters:
      - name: as_of_date
        in: body
        type: string
        description: The trial balance date.
      call: qbo.get-trial-balance
      with:
        as_of_date: '{{as_of_date}}'
      outputParameters:
      - name: total_debits
        type: string
        mapping: $.Columns.Column[1].ColTitle
      - name: total_credits
        type: string
        mapping: $.Columns.Column[2].ColTitle
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: reports
      path: /reports/TrialBalance?end_date={{as_of_date}}
      inputParameters:
      - name: as_of_date
        in: query
      operations:
      - name: get-trial-balance
        method: GET
Open in Framework → View in Fleet → quickbooks-trial-balance-lookup.yml

Retrieves payroll run summary from QuickBooks Payroll including total gross pay, total deductions, and net pay for a given pay period.

naftiko: '0.5'
info:
  label: QuickBooks Payroll Run Summary
  description: Retrieves payroll run summary from QuickBooks Payroll including total gross pay, total deductions, and net pay for a given pay period.
  tags:
  - payroll
  - quickbooks
  - small-business
capability:
  exposes:
  - type: mcp
    namespace: qbo-payroll
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Given a payroll ID, return the gross pay total, deductions total, and net pay for the pay period.
      inputParameters:
      - name: payroll_id
        in: body
        type: string
        description: The QuickBooks Payroll run ID.
      call: qbo-payroll.get-payroll
      with:
        payroll_id: '{{payroll_id}}'
      outputParameters:
      - name: gross_pay
        type: string
        mapping: $.payroll.totalGrossPay
      - name: total_deductions
        type: string
        mapping: $.payroll.totalDeductions
      - name: net_pay
        type: string
        mapping: $.payroll.totalNetPay
  consumes:
  - type: http
    namespace: qbo-payroll
    baseUri: https://payroll.api.intuit.com/v1/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: payrolls
      path: /payroll/{{payroll_id}}
      inputParameters:
      - name: payroll_id
        in: path
      operations:
      - name: get-payroll
        method: GET
Open in Framework → View in Fleet → quickbooks-payroll-run-summary.yml

Pulls customer activity data from QuickBooks, runs churn prediction via the Intuit AI platform, and creates a Salesforce opportunity for retention outreach on high-risk accounts.

naftiko: '0.5'
info:
  label: Customer Churn Prediction Pipeline
  description: Pulls customer activity data from QuickBooks, runs churn prediction via the Intuit AI platform, and creates a Salesforce opportunity for retention outreach on high-risk accounts.
  tags:
  - ai-ml
  - quickbooks
  - salesforce
  - customer-retention
  - small-business
capability:
  exposes:
  - type: mcp
    namespace: churn-prediction
    port: 8080
    tools:
    - name: predict-churn-risk
      description: Given a QuickBooks customer ID, pull activity signals, run churn prediction, and create a Salesforce retention opportunity if high risk.
      inputParameters:
      - name: customer_id
        in: body
        type: string
        description: The QuickBooks Online customer ID.
      - name: sfdc_account_id
        in: body
        type: string
        description: The corresponding Salesforce account ID.
      steps:
      - name: get-customer-activity
        type: call
        call: qbo.get-customer
        with:
          customer_id: '{{customer_id}}'
      - name: predict-churn
        type: call
        call: intuit-ai.predict-churn
        with:
          customer_id: '{{customer_id}}'
          last_transaction_date: '{{get-customer-activity.last_txn_date}}'
          balance: '{{get-customer-activity.Balance}}'
      - name: create-retention-opp
        type: call
        call: sfdc.create-opportunity
        with:
          account_id: '{{sfdc_account_id}}'
          name: 'Retention: {{get-customer-activity.DisplayName}} — churn risk {{predict-churn.risk_score}}%'
          stage: Prospecting
          type: Retention
          description: 'Churn risk score: {{predict-churn.risk_score}}%. Key factor: {{predict-churn.top_factor}}. Last activity: {{get-customer-activity.last_txn_date}}.'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: customers
      path: /customer/{{customer_id}}
      inputParameters:
      - name: customer_id
        in: path
      operations:
      - name: get-customer
        method: GET
  - type: http
    namespace: intuit-ai
    baseUri: https://ai.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.intuit_ai_token
    resources:
    - name: churn
      path: /predict/churn
      operations:
      - name: predict-churn
        method: POST
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
Open in Framework → View in Fleet → customer-churn-prediction-pipeline.yml

Tracks business mileage for QuickBooks Self-Employed users, automatically classifying trips as business or personal and calculating IRS-standard deductions.

naftiko: '0.5'
info:
  label: QuickBooks Self-Employed Mileage Tracker
  description: Tracks business mileage for QuickBooks Self-Employed users, automatically classifying trips as business or personal and calculating IRS-standard deductions.
  tags:
  - self-employed
  - mileage-tracking
  - tax-deductions
capability:
  exposes:
  - type: mcp
    namespace: mileage-tracker
    port: 8080
    tools:
    - name: get-mileage-summary
      description: Retrieve mileage tracking summary and tax deduction estimate.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The QuickBooks Self-Employed user identifier.
      - name: tax_year
        in: body
        type: integer
        description: The tax year for the mileage summary.
      call: qbse-api.get-mileage-summary
      with:
        user: '{{user_id}}'
        year: '{{tax_year}}'
      outputParameters:
      - name: total_business_miles
        type: number
        mapping: $.mileage.totalBusinessMiles
      - name: estimated_deduction
        type: number
        mapping: $.mileage.estimatedDeduction
      - name: trips_classified
        type: integer
        mapping: $.mileage.tripsClassified
  consumes:
  - type: http
    namespace: qbse-api
    baseUri: https://api.intuit.com/quickbooks-self-employed/v1
    authentication:
      type: bearer
      token: $secrets.intuit_qbse_api_token
    resources:
    - name: mileage
      path: /users/{{user}}/mileage
      inputParameters:
      - name: user
        in: path
      operations:
      - name: get-mileage-summary
        method: GET
Open in Framework → View in Fleet → quickbooks-self-employed-mileage-tracker.yml

Queries Apache NiFi for processor group status and bulletin board errors, and creates a Datadog event for visibility when data pipeline throughput drops.

naftiko: '0.5'
info:
  label: NiFi Data Pipeline Health Check
  description: Queries Apache NiFi for processor group status and bulletin board errors, and creates a Datadog event for visibility when data pipeline throughput drops.
  tags:
  - data
  - apache-nifi
  - datadog
  - data-pipelines
capability:
  exposes:
  - type: mcp
    namespace: nifi-monitoring
    port: 8080
    tools:
    - name: check-pipeline-health
      description: Given a NiFi process group ID, check throughput and errors, and log a Datadog event on anomalies.
      inputParameters:
      - name: process_group_id
        in: body
        type: string
        description: The NiFi process group ID.
      steps:
      - name: get-pg-status
        type: call
        call: nifi.get-process-group
        with:
          process_group_id: '{{process_group_id}}'
      - name: get-bulletins
        type: call
        call: nifi.get-bulletins
        with:
          process_group_id: '{{process_group_id}}'
      - name: log-event
        type: call
        call: datadog.create-event
        with:
          title: 'NiFi pipeline health: {{process_group_id}}'
          text: 'Throughput: {{get-pg-status.bytes_in}}/s in, {{get-pg-status.bytes_out}}/s out. Active threads: {{get-pg-status.active_threads}}. Bulletins: {{get-bulletins.count}}.'
          alert_type: info
  consumes:
  - type: http
    namespace: nifi
    baseUri: https://nifi.intuit.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
    - name: bulletins
      path: /flow/process-groups/{{process_group_id}}/bulletin-board
      inputParameters:
      - name: process_group_id
        in: path
      operations:
      - name: get-bulletins
        method: GET
  - 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
Open in Framework → View in Fleet → nifi-data-pipeline-health-check.yml

Enables a feature flag, monitors error rates in Datadog for a configurable window, and automatically rolls back the flag and creates a GitHub issue if errors spike.

naftiko: '0.5'
info:
  label: Feature Flag Rollout with Monitoring
  description: Enables a feature flag, monitors error rates in Datadog for a configurable window, and automatically rolls back the flag and creates a GitHub issue if errors spike.
  tags:
  - engineering
  - platform
  - datadog
  - github
  - feature-flags
capability:
  exposes:
  - type: mcp
    namespace: feature-rollout
    port: 8080
    tools:
    - name: safe-rollout
      description: Given a feature flag name and monitoring query, enable the flag, check error rates, and roll back with a GitHub issue on failure.
      inputParameters:
      - name: flag_name
        in: body
        type: string
        description: The feature flag identifier.
      - name: environment
        in: body
        type: string
        description: The deployment environment (staging, production).
      - name: error_query
        in: body
        type: string
        description: The Datadog metrics query for error monitoring.
      - name: github_repo
        in: body
        type: string
        description: The GitHub repo for rollback issues.
      steps:
      - name: enable-flag
        type: call
        call: intuit-platform.set-feature-flag
        with:
          flag_name: '{{flag_name}}'
          environment: '{{environment}}'
          enabled: 'true'
      - name: check-errors
        type: call
        call: datadog.query-metrics
        with:
          query: '{{error_query}}'
      - name: rollback-flag
        type: call
        call: intuit-platform.set-feature-flag
        with:
          flag_name: '{{flag_name}}'
          environment: '{{environment}}'
          enabled: 'false'
      - name: file-rollback-issue
        type: call
        call: github.create-issue
        with:
          repo: '{{github_repo}}'
          title: 'Feature flag rollback: {{flag_name}} in {{environment}}'
          body: 'Flag {{flag_name}} was rolled back due to elevated errors. Error metric value: {{check-errors.avg_value}}. Investigate before re-enabling.'
  consumes:
  - type: http
    namespace: intuit-platform
    baseUri: https://platform.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.intuit_platform_token
    resources:
    - name: feature-flags
      path: /flags/{{flag_name}}/environments/{{environment}}
      inputParameters:
      - name: flag_name
        in: path
      - name: environment
        in: path
      operations:
      - name: set-feature-flag
        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: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/{{repo}}/issues
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → feature-flag-rollout-with-monitoring.yml

Retrieves tax filing status from the TurboTax platform, returning filing state, IRS acceptance status, refund amount, and estimated refund date.

naftiko: '0.5'
info:
  label: TurboTax Filing Status Lookup
  description: Retrieves tax filing status from the TurboTax platform, returning filing state, IRS acceptance status, refund amount, and estimated refund date.
  tags:
  - tax
  - turbotax
capability:
  exposes:
  - type: mcp
    namespace: tax-filing
    port: 8080
    tools:
    - name: get-filing-status
      description: Look up a TurboTax filing status.
      inputParameters:
      - name: filing_id
        in: body
        type: string
        description: The tax filing ID.
      call: turbotax.get-status
      with:
        filing_id: '{{filing_id}}'
      outputParameters:
      - name: filing_state
        type: string
        mapping: $.filing.state
      - name: irs_status
        type: string
        mapping: $.filing.irsAcceptanceStatus
      - name: refund_amount
        type: string
        mapping: $.filing.estimatedRefund
      - name: refund_date
        type: string
        mapping: $.filing.estimatedRefundDate
  consumes:
  - type: http
    namespace: turbotax
    baseUri: https://tax.api.intuit.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_platform_token
    resources:
    - name: filings
      path: /filings/{{filing_id}}/status
      inputParameters:
      - name: filing_id
        in: path
      operations:
      - name: get-status
        method: GET
Open in Framework → View in Fleet → turbotax-filing-status-lookup.yml

Retrieves small business sales opportunity details from Salesforce, returning opportunity name, stage, expected revenue, and close date.

naftiko: '0.5'
info:
  label: Salesforce SMB Opportunity Lookup
  description: Retrieves small business sales opportunity details from Salesforce, returning opportunity name, stage, expected revenue, and close date.
  tags:
  - sales
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: smb-sales
    port: 8080
    tools:
    - name: get-opportunity
      description: Look up an SMB sales opportunity in Salesforce.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      call: sfdc.get-opportunity
      with:
        opportunity_id: '{{opportunity_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: stage
        type: string
        mapping: $.StageName
      - name: amount
        type: string
        mapping: $.Amount
      - name: close_date
        type: string
        mapping: $.CloseDate
  consumes:
  - type: http
    namespace: sfdc
    baseUri: https://intuit.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.sfdc_access_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunity_id}}
      inputParameters:
      - name: opportunity_id
        in: path
      operations:
      - name: get-opportunity
        method: GET
Open in Framework → View in Fleet → salesforce-smb-opportunity-lookup.yml

Looks up a subscriber in a Mailchimp audience by email hash and returns subscription status, tags, and merge fields.

naftiko: '0.5'
info:
  label: Mailchimp Audience Member Lookup
  description: Looks up a subscriber in a Mailchimp audience by email hash and returns subscription status, tags, and merge fields.
  tags:
  - marketing
  - mailchimp
  - audience-management
capability:
  exposes:
  - type: mcp
    namespace: mailchimp-audience
    port: 8080
    tools:
    - name: get-subscriber
      description: Given a Mailchimp list ID and subscriber email hash, return subscription status, tags, and merge fields.
      inputParameters:
      - name: list_id
        in: body
        type: string
        description: The Mailchimp audience list ID.
      - name: subscriber_hash
        in: body
        type: string
        description: The MD5 hash of the subscriber email address.
      call: mailchimp.get-member
      with:
        list_id: '{{list_id}}'
        subscriber_hash: '{{subscriber_hash}}'
      outputParameters:
      - name: email
        type: string
        mapping: $.email_address
      - name: status
        type: string
        mapping: $.status
      - name: tags
        type: string
        mapping: $.tags
  consumes:
  - type: http
    namespace: mailchimp
    baseUri: https://us1.api.mailchimp.com/3.0
    authentication:
      type: bearer
      token: $secrets.mailchimp_api_key
    resources:
    - name: members
      path: /lists/{{list_id}}/members/{{subscriber_hash}}
      inputParameters:
      - name: list_id
        in: path
      - name: subscriber_hash
        in: path
      operations:
      - name: get-member
        method: GET
Open in Framework → View in Fleet → mailchimp-audience-member-lookup.yml

Evaluates QuickBooks small business customers for QuickBooks Capital loan eligibility based on revenue trends, cash flow patterns, and business health metrics.

naftiko: '0.5'
info:
  label: QuickBooks Capital Loan Eligibility Checker
  description: Evaluates QuickBooks small business customers for QuickBooks Capital loan eligibility based on revenue trends, cash flow patterns, and business health metrics.
  tags:
  - small-business-lending
  - quickbooks-capital
  - eligibility
capability:
  exposes:
  - type: mcp
    namespace: qb-capital
    port: 8080
    tools:
    - name: check-loan-eligibility
      description: Check QuickBooks Capital loan eligibility for a business.
      inputParameters:
      - name: company_id
        in: body
        type: string
        description: The QuickBooks company identifier.
      - name: requested_amount
        in: body
        type: number
        description: Requested loan amount in USD.
      call: capital-api.check-eligibility
      with:
        company: '{{company_id}}'
        amount: '{{requested_amount}}'
      outputParameters:
      - name: eligible
        type: boolean
        mapping: $.eligibility.isEligible
      - name: max_approved_amount
        type: number
        mapping: $.eligibility.maxApprovedAmount
      - name: estimated_rate
        type: number
        mapping: $.eligibility.estimatedRate
  consumes:
  - type: http
    namespace: capital-api
    baseUri: https://api.intuit.com/quickbooks-capital/v1
    authentication:
      type: bearer
      token: $secrets.intuit_capital_api_token
    resources:
    - name: eligibility
      path: /companies/{{company}}/eligibility
      inputParameters:
      - name: company
        in: path
      operations:
      - name: check-eligibility
        method: GET
Open in Framework → View in Fleet → quickbooks-capital-loan-eligibility-checker.yml

Retrieves credit score information from Credit Karma for Intuit financial wellness features, returning TransUnion score, Equifax score, and key factors.

naftiko: '0.5'
info:
  label: Credit Karma Score Retriever
  description: Retrieves credit score information from Credit Karma for Intuit financial wellness features, returning TransUnion score, Equifax score, and key factors.
  tags:
  - credit
  - financial-wellness
capability:
  exposes:
  - type: mcp
    namespace: credit-scores
    port: 8080
    tools:
    - name: get-credit-score
      description: Retrieve credit score from Credit Karma.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The user ID.
      call: creditkarma.get-scores
      with:
        user_id: '{{user_id}}'
      outputParameters:
      - name: transunion_score
        type: number
        mapping: $.scores.transunion
      - name: equifax_score
        type: number
        mapping: $.scores.equifax
      - name: key_factors
        type: string
        mapping: $.factors
  consumes:
  - type: http
    namespace: creditkarma
    baseUri: https://api.creditkarma.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.creditkarma_token
    resources:
    - name: scores
      path: /users/{{user_id}}/scores
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-scores
        method: GET
Open in Framework → View in Fleet → credit-karma-score-retriever.yml

Retrieves vendor details from QuickBooks Online including display name, balance, and primary contact information.

naftiko: '0.5'
info:
  label: QuickBooks Vendor Lookup
  description: Retrieves vendor details from QuickBooks Online including display name, balance, and primary contact information.
  tags:
  - accounting
  - quickbooks
  - vendor-management
capability:
  exposes:
  - type: mcp
    namespace: qbo-vendors
    port: 8080
    tools:
    - name: get-vendor
      description: Given a QuickBooks vendor ID, return the display name, open balance, and primary email.
      inputParameters:
      - name: vendor_id
        in: body
        type: string
        description: The QuickBooks Online vendor ID.
      call: qbo.get-vendor
      with:
        vendor_id: '{{vendor_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.Vendor.DisplayName
      - name: balance
        type: string
        mapping: $.Vendor.Balance
      - name: email
        type: string
        mapping: $.Vendor.PrimaryEmailAddr.Address
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: vendors
      path: /vendor/{{vendor_id}}
      inputParameters:
      - name: vendor_id
        in: path
      operations:
      - name: get-vendor
        method: GET
Open in Framework → View in Fleet → quickbooks-vendor-lookup.yml

Queries Elasticsearch for platform log entries across Intuit services, returning log count, error distribution, and top error messages.

naftiko: '0.5'
info:
  label: Elasticsearch Platform Log Query
  description: Queries Elasticsearch for platform log entries across Intuit services, returning log count, error distribution, and top error messages.
  tags:
  - monitoring
  - elasticsearch
  - logging
capability:
  exposes:
  - type: mcp
    namespace: platform-logs
    port: 8080
    tools:
    - name: query-logs
      description: Query platform logs from Elasticsearch.
      inputParameters:
      - name: index
        in: body
        type: string
        description: The log index name.
      - name: service
        in: body
        type: string
        description: The service name to filter.
      call: elasticsearch.search-logs
      with:
        index: '{{index}}'
        service: '{{service}}'
      outputParameters:
      - name: total_hits
        type: number
        mapping: $.hits.total.value
      - name: error_count
        type: number
        mapping: $.aggregations.errors.doc_count
      - name: top_error
        type: string
        mapping: $.aggregations.top_errors.buckets[0].key
  consumes:
  - type: http
    namespace: elasticsearch
    baseUri: https://elasticsearch.intuit.com
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: search
      path: /{{index}}/_search
      inputParameters:
      - name: index
        in: path
      operations:
      - name: search-logs
        method: POST
Open in Framework → View in Fleet → elasticsearch-platform-log-query.yml

Fetches unreconciled QuickBooks transactions, classifies them using the Intuit AI categorization engine, and updates the transaction categories in QuickBooks Online.

naftiko: '0.5'
info:
  label: Expense Categorization and Reconciliation
  description: Fetches unreconciled QuickBooks transactions, classifies them using the Intuit AI categorization engine, and updates the transaction categories in QuickBooks Online.
  tags:
  - accounting
  - quickbooks
  - ai-ml
  - categorization
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: smart-categorization
    port: 8080
    tools:
    - name: categorize-transactions
      description: Given a QuickBooks account ID and date range, fetch uncategorized transactions, run AI categorization, and update each transaction.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The QuickBooks bank account 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-transactions
        type: call
        call: qbo.query-transactions
        with:
          account_id: '{{account_id}}'
          start_date: '{{start_date}}'
          end_date: '{{end_date}}'
      - name: classify-expenses
        type: call
        call: intuit-ai.classify-transactions
        with:
          transactions: '{{get-transactions.results}}'
      - name: update-categories
        type: call
        call: qbo.batch-update
        with:
          batch_items: '{{classify-expenses.categorized_transactions}}'
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: query-transactions
        method: GET
    - name: batch
      path: /batch
      operations:
      - name: batch-update
        method: POST
  - type: http
    namespace: intuit-ai
    baseUri: https://ai.api.intuit.com/v1
    authentication:
      type: bearer
      token: $secrets.intuit_ai_token
    resources:
    - name: classification
      path: /classify/transactions
      operations:
      - name: classify-transactions
        method: POST
Open in Framework → View in Fleet → expense-categorization-and-reconciliation.yml

Creates a journal entry in QuickBooks Online for manual adjustments, returning the journal entry ID, transaction date, and total amount.

naftiko: '0.5'
info:
  label: QuickBooks Journal Entry Creator
  description: Creates a journal entry in QuickBooks Online for manual adjustments, returning the journal entry ID, transaction date, and total amount.
  tags:
  - accounting
  - quickbooks
capability:
  exposes:
  - type: mcp
    namespace: qbo-journal
    port: 8080
    tools:
    - name: create-journal-entry
      description: Create a journal entry in QuickBooks Online.
      inputParameters:
      - name: debit_account
        in: body
        type: string
        description: The debit account name.
      - name: credit_account
        in: body
        type: string
        description: The credit account name.
      - name: amount
        in: body
        type: string
        description: The journal entry amount.
      call: qbo.create-journal
      with:
        debit_account: '{{debit_account}}'
        credit_account: '{{credit_account}}'
        amount: '{{amount}}'
      outputParameters:
      - name: journal_id
        type: string
        mapping: $.JournalEntry.Id
      - name: txn_date
        type: string
        mapping: $.JournalEntry.TxnDate
      - name: total
        type: string
        mapping: $.JournalEntry.TotalAmt
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: journals
      path: /journalentry
      operations:
      - name: create-journal
        method: POST
Open in Framework → View in Fleet → quickbooks-journal-entry-creator.yml

Retrieves bill payment details from QuickBooks Online, returning vendor name, payment amount, payment method, and check number.

naftiko: '0.5'
info:
  label: QuickBooks Bill Payment Lookup
  description: Retrieves bill payment details from QuickBooks Online, returning vendor name, payment amount, payment method, and check number.
  tags:
  - accounting
  - quickbooks
  - payables
capability:
  exposes:
  - type: mcp
    namespace: qbo-bill-payments
    port: 8080
    tools:
    - name: get-bill-payment
      description: Look up a bill payment in QuickBooks Online.
      inputParameters:
      - name: payment_id
        in: body
        type: string
        description: The bill payment ID.
      call: qbo.get-bill-payment
      with:
        payment_id: '{{payment_id}}'
      outputParameters:
      - name: vendor
        type: string
        mapping: $.BillPayment.VendorRef.name
      - name: amount
        type: string
        mapping: $.BillPayment.TotalAmt
      - name: pay_type
        type: string
        mapping: $.BillPayment.PayType
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: bill-payments
      path: /billpayment/{{payment_id}}
      inputParameters:
      - name: payment_id
        in: path
      operations:
      - name: get-bill-payment
        method: GET
Open in Framework → View in Fleet → quickbooks-bill-payment-lookup.yml

Retrieves bank feed transactions from QuickBooks Online for reconciliation, returning transaction date, amount, payee name, and match status.

naftiko: '0.5'
info:
  label: QuickBooks Bank Feed Transaction Lookup
  description: Retrieves bank feed transactions from QuickBooks Online for reconciliation, returning transaction date, amount, payee name, and match status.
  tags:
  - accounting
  - quickbooks
  - banking
capability:
  exposes:
  - type: mcp
    namespace: qbo-bankfeed
    port: 8080
    tools:
    - name: get-bank-transaction
      description: Look up a bank feed transaction in QuickBooks.
      inputParameters:
      - name: transaction_id
        in: body
        type: string
        description: The bank feed transaction ID.
      call: qbo.get-bank-transaction
      with:
        transaction_id: '{{transaction_id}}'
      outputParameters:
      - name: date
        type: string
        mapping: $.BankTransaction.TxnDate
      - name: amount
        type: string
        mapping: $.BankTransaction.TotalAmt
      - name: payee
        type: string
        mapping: $.BankTransaction.PayeeName
      - name: match_status
        type: string
        mapping: $.BankTransaction.MatchStatus
  consumes:
  - type: http
    namespace: qbo
    baseUri: https://quickbooks.api.intuit.com/v3/company/{{realm_id}}
    authentication:
      type: bearer
      token: $secrets.qbo_access_token
    resources:
    - name: transactions
      path: /banktransaction/{{transaction_id}}
      inputParameters:
      - name: transaction_id
        in: path
      operations:
      - name: get-bank-transaction
        method: GET
Open in Framework → View in Fleet → quickbooks-bank-feed-transaction-lookup.yml

Identifies cross-team dependencies in Jira and posts a status report to program management Slack.

naftiko: '0.5'
info:
  label: Jira Cross-Team Dependency Tracker
  description: Identifies cross-team dependencies in Jira and posts a status report to program management Slack.
  tags:
  - project-management
  - jira
  - slack
  - dependencies
capability:
  exposes:
  - type: mcp
    namespace: dep-ops
    port: 8080
    tools:
    - name: handle-dependency-report
      description: Given a project key, identify blocked items and post a report.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      steps:
      - name: search-blocked
        type: call
        call: jira-deps.search-issues
        with:
          jql: project = {{project_key}} AND status = Blocked
      - name: post-report
        type: call
        call: slack-pm.post-message
        with:
          channel: program-management
          text: 'Dependencies: {{project_key}} | Blocked: {{search-blocked.total}}'
  consumes:
  - type: http
    namespace: jira-deps
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: slack-pm
    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 → jira-cross-team-dependency-tracker.yml

On a Meta Quest app store launch, pulls performance data from the Meta Graph API and posts an executive launch report to the marketing Slack channel.

naftiko: '0.5'
info:
  label: Meta Quest VR App Launch Marketing Digest
  description: On a Meta Quest app store launch, pulls performance data from the Meta Graph API and posts an executive launch report to the marketing Slack channel.
  tags:
  - marketing
  - meta-quest
  - vr
  - meta-graph
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: quest-marketing
    port: 8080
    tools:
    - name: publish-app-launch-digest
      description: Given a Meta Quest app ID and launch date, retrieve first-week download counts, ratings, and revenue from the Meta Graph API and post a launch performance digest to the product Slack channel.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Meta Quest app ID to report on.
      - name: launch_date
        in: body
        type: string
        description: The app launch date in ISO 8601 format (YYYY-MM-DD).
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID to post the report to.
      steps:
      - name: get-app-metrics
        type: call
        call: meta-graph.get-app-insights
        with:
          app_id: '{{app_id}}'
          since: '{{launch_date}}'
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Quest App Launch Report - {{app_id}}: Downloads: {{get-app-metrics.installs}} | Revenue: ${{get-app-metrics.revenue}} | Rating: {{get-app-metrics.avg_rating}}/5'
  consumes:
  - type: http
    namespace: meta-graph
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_graph_token
    resources:
    - name: app-insights
      path: /{{app_id}}/app_insights
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-app-insights
        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 → meta-quest-vr-app-launch-marketing-digest.yml

Retrieves the latest Llama model release information from GitHub.

naftiko: '0.5'
info:
  label: GitHub Llama Model Release Lookup
  description: Retrieves the latest Llama model release information from GitHub.
  tags:
  - ai
  - github
  - llama
capability:
  exposes:
  - type: mcp
    namespace: llama-ops
    port: 8080
    tools:
    - name: get-llama-release
      description: Return the latest Llama release from GitHub. Use for model deployment planning.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name.
      call: github-llama.get-release
      with:
        repo_name: '{{repo_name}}'
      outputParameters:
      - name: release
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: github-llama
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/meta-llama/{{repo_name}}/releases/latest
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-release
        method: GET
Open in Framework → View in Fleet → github-llama-model-release-lookup.yml

Queries business messaging KPIs from Snowflake and posts to the business messaging Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Business Messaging KPI Report
  description: Queries business messaging KPIs from Snowflake and posts to the business messaging Slack channel.
  tags:
  - messaging
  - snowflake
  - slack
  - kpi
capability:
  exposes:
  - type: mcp
    namespace: biz-msg-ops
    port: 8080
    tools:
    - name: handle-messaging-kpi
      description: Given a period, query messaging KPIs and post.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: query-kpis
        type: call
        call: snowflake-bizmsg.run-query
        with:
          period: '{{period}}'
      - name: post-report
        type: call
        call: slack-bizmsg.post-message
        with:
          channel: business-messaging
          text: 'Messaging KPIs ({{period}}): Businesses: {{query-kpis.active_businesses}} | Messages: {{query-kpis.total_messages}} | Revenue: ${{query-kpis.revenue}}'
  consumes:
  - type: http
    namespace: snowflake-bizmsg
    baseUri: https://meta.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: slack-bizmsg
    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 → snowflake-business-messaging-kpi-report.yml

Checks WhatsApp message delivery rate metrics from Datadog.

naftiko: '0.5'
info:
  label: Datadog WhatsApp Delivery Rate Check
  description: Checks WhatsApp message delivery rate metrics from Datadog.
  tags:
  - messaging
  - datadog
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: wa-delivery
    port: 8080
    tools:
    - name: get-delivery-rate
      description: Given a region, return WhatsApp delivery rate metrics from Datadog.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Geographic region.
      call: dd-wa.get-metrics
      with:
        query: avg:whatsapp.delivery_rate{region:{{region}}}
      outputParameters:
      - name: series
        type: array
        mapping: $.series
  consumes:
  - type: http
    namespace: dd-wa
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → datadog-whatsapp-delivery-rate-check.yml

When Datadog detects Reels video encoding pipeline issues, creates a Jira incident and notifies the video team in Slack.

naftiko: '0.5'
info:
  label: Datadog Reels Video Encoding Alert
  description: When Datadog detects Reels video encoding pipeline issues, creates a Jira incident and notifies the video team in Slack.
  tags:
  - video
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: reels-ops
    port: 8080
    tools:
    - name: handle-encoding-alert
      description: Given a Datadog monitor ID for Reels encoding, create a Jira incident and notify the video team.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: Datadog monitor ID.
      steps:
      - name: get-monitor
        type: call
        call: dd-reels.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: jira-video.create-issue
        with:
          project_key: VIDEO
          issuetype: Incident
          summary: 'Reels encoding: {{get-monitor.name}}'
          priority: High
      - name: notify-video
        type: call
        call: slack-video.post-message
        with:
          channel: video-engineering
          text: 'REELS ENCODING ALERT: {{get-monitor.name}} | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: dd-reels
    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: jira-video
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-video
    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 → datadog-reels-video-encoding-alert.yml

Returns the current count of open bugs in the WhatsApp Jira project.

naftiko: '0.5'
info:
  label: Jira WhatsApp Bug Count
  description: Returns the current count of open bugs in the WhatsApp Jira project.
  tags:
  - engineering
  - jira
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: wa-eng
    port: 8080
    tools:
    - name: get-wa-bugs
      description: Given a priority, return the count of open WhatsApp bugs. Use for quality tracking.
      inputParameters:
      - name: priority
        in: body
        type: string
        description: Bug priority filter.
      call: jira-wa.search-issues
      with:
        jql: project = WA AND type = Bug AND status != Done AND priority = {{priority}}
      outputParameters:
      - name: total
        type: number
        mapping: $.total
  consumes:
  - type: http
    namespace: jira-wa
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
Open in Framework → View in Fleet → jira-whatsapp-bug-count.yml

Retrieves a ServiceNow change request, notifies the Change Advisory Board via Slack, and updates the change record with the approval decision.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Approval Flow
  description: Retrieves a ServiceNow change request, notifies the Change Advisory Board via Slack, and updates the change record with the approval decision.
  tags:
  - itsm
  - change-management
  - servicenow
  - slack
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: process-change-approval
      description: Given a ServiceNow change request number and approval decision, retrieve the change details, update the ServiceNow record with the approval status, and notify the CAB via Slack.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number (e.g., CHG0012345).
      - name: approval_decision
        in: body
        type: string
        description: 'The approval decision: approved or rejected.'
      - name: approver_comments
        in: body
        type: string
        description: Comments from the approver explaining the decision.
      steps:
      - name: get-change
        type: call
        call: servicenow-lookup.get-change
        with:
          number: '{{change_number}}'
      - name: update-change
        type: call
        call: servicenow-update.update-change-status
        with:
          sys_id: '{{get-change.sys_id}}'
          state: '{{approval_decision}}'
          comments: '{{approver_comments}}'
      - name: notify-cab
        type: call
        call: slack.post-message
        with:
          channel: change-advisory-board
          text: 'Change {{change_number}} - {{get-change.short_description}}: {{approval_decision}}. Comments: {{approver_comments}}'
  consumes:
  - type: http
    namespace: servicenow-lookup
    baseUri: https://meta.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-request
      path: /table/change_request
      operations:
      - name: get-change
        method: GET
  - type: http
    namespace: servicenow-update
    baseUri: https://meta.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-record
      path: /table/change_request/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-change-status
        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 → servicenow-change-request-approval-flow.yml

Processes GitHub security findings, creates Jira tickets, and notifies the security team in Slack.

naftiko: '0.5'
info:
  label: GitHub Security Scan to Jira Ticket
  description: Processes GitHub security findings, creates Jira tickets, and notifies the security team in Slack.
  tags:
  - security
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: appsec-ops
    port: 8080
    tools:
    - name: handle-security-finding
      description: Given a GitHub repo and alert, create a Jira ticket and notify security.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: GitHub repository.
      - name: alert_number
        in: body
        type: integer
        description: Security alert number.
      steps:
      - name: get-alert
        type: call
        call: github-sec.get-alert
        with:
          repo_name: '{{repo_name}}'
          alert_number: '{{alert_number}}'
      - name: create-ticket
        type: call
        call: jira-sec.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Security: {{get-alert.rule.description}} in {{repo_name}}'
          priority: Critical
      - name: notify-sec
        type: call
        call: slack-sec.post-message
        with:
          channel: security-alerts
          text: 'SECURITY: {{repo_name}} | {{get-alert.rule.description}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: github-sec
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: alerts
      path: /repos/facebook/{{repo_name}}/code-scanning/alerts/{{alert_number}}
      inputParameters:
      - name: repo_name
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: jira-sec
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-sec
    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-security-scan-to-jira-ticket.yml

When a leave request is submitted in Workday, notifies the manager in Slack.

naftiko: '0.5'
info:
  label: Workday Leave Request Notification
  description: When a leave request is submitted in Workday, notifies the manager in Slack.
  tags:
  - hr
  - workday
  - slack
  - leave-management
capability:
  exposes:
  - type: mcp
    namespace: leave-ops
    port: 8080
    tools:
    - name: handle-leave-request
      description: Given employee ID and dates, notify manager.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      - name: leave_dates
        in: body
        type: string
        description: Leave dates.
      steps:
      - name: get-worker
        type: call
        call: workday-leave.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: notify
        type: call
        call: slack-leave.post-message
        with:
          channel: manager-approvals
          text: 'LEAVE: {{get-worker.fullName}} | {{leave_dates}} | Review in Workday.'
  consumes:
  - type: http
    namespace: workday-leave
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    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: slack-leave
    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 → workday-leave-request-notification.yml

Creates a new Terraform Cloud workspace for an engineering team, links it to GitHub, and notifies the platform engineering team via Slack.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Workspace Provisioning
  description: Creates a new Terraform Cloud workspace for an engineering team, links it to GitHub, and notifies the platform engineering team via Slack.
  tags:
  - cloud
  - infrastructure
  - terraform
  - github
  - slack
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-team-workspace
      description: Given a team name, GitHub repository, and target environment, create a Terraform Cloud workspace, link the VCS repository, and notify the platform engineering Slack channel.
      inputParameters:
      - name: team_name
        in: body
        type: string
        description: The engineering team name for workspace naming.
      - name: repository
        in: body
        type: string
        description: The GitHub repository to link (e.g., facebook/infrastructure).
      - name: environment
        in: body
        type: string
        description: 'Target environment: dev, staging, or production.'
      steps:
      - name: create-workspace
        type: call
        call: terraform.create-workspace
        with:
          name: '{{team_name}}-{{environment}}'
          vcs_repo: '{{repository}}'
      - name: notify-platform
        type: call
        call: slack.post-message
        with:
          channel: platform-engineering
          text: 'Workspace created: {{team_name}}-{{environment}} linked to {{repository}}. ID: {{create-workspace.workspace_id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/meta/workspaces
      operations:
      - name: create-workspace
        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 → terraform-cloud-infrastructure-workspace-provisioning.yml

Retrieves message delivery and read rate metrics from the Meta Graph API for WhatsApp Business accounts and posts a daily performance report to Slack.

naftiko: '0.5'
info:
  label: WhatsApp Business API Delivery Report
  description: Retrieves message delivery and read rate metrics from the Meta Graph API for WhatsApp Business accounts and posts a daily performance report to Slack.
  tags:
  - marketing
  - whatsapp
  - meta-graph
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: whatsapp-reporting
    port: 8080
    tools:
    - name: publish-whatsapp-delivery-report
      description: Given a WhatsApp Business Account ID and date, retrieve message delivery and read rate analytics from the Meta Graph API and post a daily report to the messaging Slack channel.
      inputParameters:
      - name: waba_id
        in: body
        type: string
        description: The WhatsApp Business Account ID to report on.
      - name: report_date
        in: body
        type: string
        description: The date to retrieve metrics for (YYYY-MM-DD).
      steps:
      - name: get-analytics
        type: call
        call: meta-graph.get-whatsapp-analytics
        with:
          waba_id: '{{waba_id}}'
          start: '{{report_date}}'
          end: '{{report_date}}'
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: whatsapp-ops
          text: 'WhatsApp Report ({{report_date}}): Sent: {{get-analytics.sent}} | Delivered: {{get-analytics.delivered}} | Read: {{get-analytics.read}} | Delivery Rate: {{get-analytics.delivery_rate}}%'
  consumes:
  - type: http
    namespace: meta-graph
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_graph_token
    resources:
    - name: whatsapp-analytics
      path: /{{waba_id}}/analytics
      inputParameters:
      - name: waba_id
        in: path
      operations:
      - name: get-whatsapp-analytics
        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 → whatsapp-business-api-delivery-report.yml

Retrieves Facebook Page post engagement metrics for a given week from the Meta Graph API and posts a weekly summary to the social media Slack channel.

naftiko: '0.5'
info:
  label: Facebook Page Engagement Digest
  description: Retrieves Facebook Page post engagement metrics for a given week from the Meta Graph API and posts a weekly summary to the social media Slack channel.
  tags:
  - marketing
  - social-media
  - meta-graph
  - facebook
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: social-reporting
    port: 8080
    tools:
    - name: digest-page-engagement
      description: Given a Facebook Page ID and date range, retrieve post impressions, engagements, and reach from the Meta Graph API and post a weekly engagement digest to the social media Slack channel.
      inputParameters:
      - name: page_id
        in: body
        type: string
        description: The Facebook Page ID to pull engagement metrics for.
      - name: date_start
        in: body
        type: string
        description: Start date for the digest period (YYYY-MM-DD).
      - name: date_stop
        in: body
        type: string
        description: End date for the digest period (YYYY-MM-DD).
      steps:
      - name: get-page-insights
        type: call
        call: meta-graph.get-page-insights
        with:
          page_id: '{{page_id}}'
          since: '{{date_start}}'
          until: '{{date_stop}}'
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: social-media-team
          text: 'Facebook Page Weekly Report ({{date_start}} to {{date_stop}}): Reach: {{get-page-insights.reach}} | Impressions: {{get-page-insights.impressions}} | Engagements: {{get-page-insights.engagements}}'
  consumes:
  - type: http
    namespace: meta-graph
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_graph_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: 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 → facebook-page-engagement-digest.yml

When Datadog detects high Facebook News Feed latency, creates a Jira P1 incident and notifies the feed team in Slack.

naftiko: '0.5'
info:
  label: Datadog Facebook Feed Latency Alert to Jira
  description: When Datadog detects high Facebook News Feed latency, creates a Jira P1 incident and notifies the feed team in Slack.
  tags:
  - platform
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: feed-latency
    port: 8080
    tools:
    - name: handle-feed-latency
      description: Given a Datadog monitor ID for feed latency, create a Jira P1 and notify the feed team.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: Datadog monitor ID.
      steps:
      - name: get-monitor
        type: call
        call: dd-feed.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-p1
        type: call
        call: jira-feed.create-issue
        with:
          project_key: FEED
          issuetype: Incident
          summary: 'P1: Feed latency — {{get-monitor.name}}'
          priority: Highest
      - name: notify-feed
        type: call
        call: slack-feed.post-message
        with:
          channel: feed-engineering
          text: 'FEED LATENCY P1: {{get-monitor.name}} | Jira: {{create-p1.key}}'
  consumes:
  - type: http
    namespace: dd-feed
    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: jira-feed
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-feed
    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 → datadog-facebook-feed-latency-alert-to-jira.yml

Queries Snowflake for advertiser churn signals, creates Salesforce tasks, and notifies customer success in Slack.

naftiko: '0.5'
info:
  label: Salesforce Advertiser Churn Risk Alert
  description: Queries Snowflake for advertiser churn signals, creates Salesforce tasks, and notifies customer success in Slack.
  tags:
  - customer-success
  - salesforce
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: churn-ops
    port: 8080
    tools:
    - name: handle-churn-risk
      description: Given a risk threshold, identify at-risk advertisers and create follow-up tasks.
      inputParameters:
      - name: risk_threshold
        in: body
        type: number
        description: Churn risk score threshold.
      steps:
      - name: query-risk
        type: call
        call: snowflake-churn.run-query
        with:
          threshold: '{{risk_threshold}}'
      - name: create-task
        type: call
        call: sf-churn.create-task
        with:
          subject: At-risk advertisers above {{risk_threshold}}
      - name: notify-cs
        type: call
        call: slack-cs.post-message
        with:
          channel: ad-customer-success
          text: 'CHURN RISK: {{query-risk.at_risk_count}} advertisers above {{risk_threshold}} | Task: {{create-task.id}}'
  consumes:
  - type: http
    namespace: snowflake-churn
    baseUri: https://meta.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: sf-churn
    baseUri: https://meta.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack-cs
    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 → salesforce-advertiser-churn-risk-alert.yml

When a Datadog error rate monitor fires after a deployment, triggers a GitHub Actions rollback workflow and creates a ServiceNow emergency change request.

naftiko: '0.5'
info:
  label: Datadog Deployment Rollback Trigger
  description: When a Datadog error rate monitor fires after a deployment, triggers a GitHub Actions rollback workflow and creates a ServiceNow emergency change request.
  tags:
  - devops
  - deployment
  - datadog
  - github
  - servicenow
  - rollback
capability:
  exposes:
  - type: mcp
    namespace: deployment-safety
    port: 8080
    tools:
    - name: trigger-deployment-rollback
      description: Given a Datadog monitor alert with repository, environment, and target rollback version, create a ServiceNow emergency change, trigger the rollback GitHub Actions workflow, and log a Datadog event.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository to roll back.
      - name: environment
        in: body
        type: string
        description: 'The environment to roll back: production or staging.'
      - name: target_version
        in: body
        type: string
        description: The stable version tag to roll back to (e.g., v3.2.1).
      steps:
      - name: create-emergency-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Emergency rollback: {{repository}} to {{target_version}} in {{environment}}'
          type: emergency
          category: software_deployment
      - name: trigger-rollback
        type: call
        call: github.trigger-workflow
        with:
          repository: '{{repository}}'
          workflow_id: rollback.yml
          ref: main
      - name: log-event
        type: call
        call: datadog.create-event
        with:
          title: 'Rollback triggered: {{repository}}/{{environment}} to {{target_version}}'
          alert_type: warning
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://meta.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-request
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - 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: trigger-workflow
        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 → datadog-deployment-rollback-trigger.yml

When an employee termination is processed in Workday, notifies IT security for access revocation in Slack.

naftiko: '0.5'
info:
  label: Workday Termination Access Revocation
  description: When an employee termination is processed in Workday, notifies IT security for access revocation in Slack.
  tags:
  - hr
  - workday
  - slack
  - security
capability:
  exposes:
  - type: mcp
    namespace: offboard-ops
    port: 8080
    tools:
    - name: handle-termination
      description: Given a Workday employee ID, notify IT for access revocation.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      steps:
      - name: get-worker
        type: call
        call: workday-term.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: notify-security
        type: call
        call: slack-sec.post-message
        with:
          channel: it-security
          text: 'ACCESS REVOCATION: {{get-worker.fullName}} ({{employee_id}}) | Revoke all access immediately.'
  consumes:
  - type: http
    namespace: workday-term
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    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: slack-sec
    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 → workday-termination-access-revocation.yml

Queries Quest headset telemetry from Snowflake and posts a digest to the Reality Labs Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Quest Headset Telemetry Digest
  description: Queries Quest headset telemetry from Snowflake and posts a digest to the Reality Labs Slack channel.
  tags:
  - vr
  - snowflake
  - slack
  - reality-labs
capability:
  exposes:
  - type: mcp
    namespace: quest-analytics
    port: 8080
    tools:
    - name: handle-quest-telemetry
      description: Given a period, query Quest telemetry and post to Reality Labs.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: query-telemetry
        type: call
        call: snowflake-quest.run-query
        with:
          period: '{{period}}'
      - name: post-digest
        type: call
        call: slack-rl.post-message
        with:
          channel: reality-labs
          text: 'Quest Telemetry ({{period}}): Active devices: {{query-telemetry.active_devices}} | Avg session: {{query-telemetry.avg_session_min}}min | Crash rate: {{query-telemetry.crash_rate}}%'
  consumes:
  - type: http
    namespace: snowflake-quest
    baseUri: https://meta.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: slack-rl
    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 → snowflake-quest-headset-telemetry-digest.yml

When a Datadog SLO drops below target for a production service, creates a Jira incident ticket and posts an urgent escalation to the reliability engineering Slack channel.

naftiko: '0.5'
info:
  label: Datadog SLO Breach Escalation
  description: When a Datadog SLO drops below target for a production service, creates a Jira incident ticket and posts an urgent escalation to the reliability engineering Slack channel.
  tags:
  - observability
  - slo
  - datadog
  - jira
  - slack
  - reliability
capability:
  exposes:
  - type: mcp
    namespace: slo-escalation
    port: 8080
    tools:
    - name: escalate-slo-breach
      description: Given a Datadog SLO ID that has breached its target, retrieve SLO details, open a Jira issue for the owning team, and post an urgent escalation to the reliability engineering Slack channel.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: The Datadog SLO ID that has breached its target.
      - name: current_value
        in: body
        type: number
        description: The current SLO value as a percentage.
      - name: target_value
        in: body
        type: number
        description: The target SLO value as a percentage.
      steps:
      - name: get-slo
        type: call
        call: datadog.get-slo
        with:
          slo_id: '{{slo_id}}'
      - name: create-issue
        type: call
        call: jira.create-issue
        with:
          project_key: REL
          issuetype: Bug
          summary: 'SLO Breach: {{get-slo.name}} at {{current_value}}% (target {{target_value}}%)'
          description: 'SLO {{get-slo.name}} has breached. Current: {{current_value}}% | Target: {{target_value}}%'
      - name: notify-reliability
        type: call
        call: slack.post-message
        with:
          channel: reliability-engineering
          text: 'SLO BREACH: {{get-slo.name}} at {{current_value}}% against {{target_value}}% target. Jira: {{create-issue.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: slos
      path: /slo/{{slo_id}}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo
        method: GET
  - type: http
    namespace: jira
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-breach-escalation.yml

Generates ad spend forecast from Salesforce opportunities, enriches with Snowflake data, and posts to the revenue Slack channel.

naftiko: '0.5'
info:
  label: Salesforce Ad Spend Forecast Report
  description: Generates ad spend forecast from Salesforce opportunities, enriches with Snowflake data, and posts to the revenue Slack channel.
  tags:
  - finance
  - salesforce
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ad-finance
    port: 8080
    tools:
    - name: handle-ad-forecast
      description: Given a quarter, compile ad spend forecast and post to revenue team.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter (e.g. Q1-2026).
      steps:
      - name: query-pipeline
        type: call
        call: sf-ad-rev.query-opportunities
        with:
          quarter: '{{quarter}}'
      - name: enrich
        type: call
        call: snowflake-rev.run-query
        with:
          quarter: '{{quarter}}'
      - name: post-forecast
        type: call
        call: slack-rev.post-message
        with:
          channel: revenue-operations
          text: 'Ad Spend Forecast ({{quarter}}): Pipeline: ${{query-pipeline.totalAmount}} | Weighted: ${{enrich.weighted}} | Growth: {{enrich.yoy_growth}}%'
  consumes:
  - type: http
    namespace: sf-ad-rev
    baseUri: https://meta.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: query
      path: /query
      inputParameters:
      - name: quarter
        in: query
      operations:
      - name: query-opportunities
        method: GET
  - type: http
    namespace: snowflake-rev
    baseUri: https://meta.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: slack-rev
    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 → salesforce-ad-spend-forecast-report.yml

Scans GitHub repositories for exposed secrets using secret scanning alerts, creates Jira security issues for each finding, and notifies the security team via Slack.

naftiko: '0.5'
info:
  label: GitHub Repository Secrets Audit
  description: Scans GitHub repositories for exposed secrets using secret scanning alerts, creates Jira security issues for each finding, and notifies the security team via Slack.
  tags:
  - security
  - github
  - jira
  - slack
  - secrets-management
  - devops
capability:
  exposes:
  - type: mcp
    namespace: secrets-audit
    port: 8080
    tools:
    - name: audit-repository-secrets
      description: Given a GitHub repository, retrieve all open secret scanning alerts, create Jira security issues for each, and post a summary to the security Slack channel.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository to audit for exposed secrets (e.g., facebook/react).
      steps:
      - name: get-secret-alerts
        type: call
        call: github.list-secret-scanning-alerts
        with:
          repository: '{{repository}}'
          state: open
      - name: create-security-issue
        type: call
        call: jira.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Secret scanning alerts in {{repository}}: {{get-secret-alerts.alert_count}} open'
          description: '{{get-secret-alerts.alert_summary}}'
      - name: notify-security
        type: call
        call: slack.post-message
        with:
          channel: security-alerts
          text: 'Secret Scanning Alert: {{repository}} has {{get-secret-alerts.alert_count}} open secret exposures. Jira: {{create-security-issue.key}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: secret-scanning-alerts
      path: /repos/{{repository}}/secret-scanning/alerts
      inputParameters:
      - name: repository
        in: path
      operations:
      - name: list-secret-scanning-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-repository-secrets-audit.yml

When Datadog detects high error rates on Threads API, creates a Jira incident and notifies the Threads team in Slack.

naftiko: '0.5'
info:
  label: Datadog Threads API Error Rate Handler
  description: When Datadog detects high error rates on Threads API, creates a Jira incident and notifies the Threads team in Slack.
  tags:
  - platform
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: threads-ops
    port: 8080
    tools:
    - name: handle-threads-error
      description: Given a Datadog monitor ID for Threads API errors, create a Jira incident and notify the team.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: Datadog monitor ID.
      steps:
      - name: get-monitor
        type: call
        call: dd-threads.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: jira-threads.create-issue
        with:
          project_key: THREADS
          issuetype: Incident
          summary: 'Threads API error: {{get-monitor.name}}'
          priority: High
      - name: notify-threads
        type: call
        call: slack-threads.post-message
        with:
          channel: threads-engineering
          text: 'THREADS API ERROR: {{get-monitor.name}} | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: dd-threads
    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: jira-threads
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-threads
    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 → datadog-threads-api-error-rate-handler.yml

Orchestrates WhatsApp Business customer onboarding in Salesforce and notifies the messaging team in Slack.

naftiko: '0.5'
info:
  label: Salesforce WhatsApp Business Onboarding
  description: Orchestrates WhatsApp Business customer onboarding in Salesforce and notifies the messaging team in Slack.
  tags:
  - messaging
  - salesforce
  - slack
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: wa-onboard
    port: 8080
    tools:
    - name: handle-wa-onboarding
      description: Given customer details, create a Salesforce account and notify the messaging team.
      inputParameters:
      - name: company_name
        in: body
        type: string
        description: Company name.
      - name: tier
        in: body
        type: string
        description: WhatsApp Business tier.
      steps:
      - name: create-account
        type: call
        call: sf-wa.create-account
        with:
          name: '{{company_name}}'
          type: WhatsApp Business — {{tier}}
      - name: notify-messaging
        type: call
        call: slack-wa.post-message
        with:
          channel: whatsapp-business
          text: 'WA ONBOARDING: {{company_name}} | Tier: {{tier}} | SF: {{create-account.id}}'
  consumes:
  - type: http
    namespace: sf-wa
    baseUri: https://meta.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: slack-wa
    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 → salesforce-whatsapp-business-onboarding.yml

Tracks intern program metrics from Workday and posts to the talent Slack channel.

naftiko: '0.5'
info:
  label: Workday Intern Program Tracker
  description: Tracks intern program metrics from Workday and posts to the talent Slack channel.
  tags:
  - hr
  - workday
  - slack
  - internship
capability:
  exposes:
  - type: mcp
    namespace: intern-ops
    port: 8080
    tools:
    - name: handle-intern-tracking
      description: Given a program year, track metrics and post.
      inputParameters:
      - name: program_year
        in: body
        type: string
        description: Program year.
      steps:
      - name: get-metrics
        type: call
        call: workday-intern.get-report
        with:
          year: '{{program_year}}'
      - name: post-update
        type: call
        call: slack-talent.post-message
        with:
          channel: talent-programs
          text: 'Intern Program ({{program_year}}): Active: {{get-metrics.active}} | Offers: {{get-metrics.offers}} | Conversion: {{get-metrics.conversion}}%'
  consumes:
  - type: http
    namespace: workday-intern
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /internProgram
      inputParameters:
      - name: year
        in: query
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: slack-talent
    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 → workday-intern-program-tracker.yml

Escalates content policy violations from Jira, creates Salesforce cases for advertisers, and notifies the policy team in Slack.

naftiko: '0.5'
info:
  label: Jira Content Policy Violation Escalation
  description: Escalates content policy violations from Jira, creates Salesforce cases for advertisers, and notifies the policy team in Slack.
  tags:
  - trust-safety
  - jira
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: policy-ops
    port: 8080
    tools:
    - name: handle-policy-violation
      description: Given a Jira issue key for a content policy violation, create a Salesforce case and notify the policy team.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Jira issue key.
      - name: advertiser_id
        in: body
        type: string
        description: Salesforce advertiser account ID.
      steps:
      - name: get-issue
        type: call
        call: jira-policy.get-issue
        with:
          issue_key: '{{issue_key}}'
      - name: create-case
        type: call
        call: sf-policy.create-case
        with:
          account_id: '{{advertiser_id}}'
          subject: 'Policy violation: {{get-issue.fields.summary}}'
      - name: notify-policy
        type: call
        call: slack-policy.post-message
        with:
          channel: content-policy
          text: 'POLICY VIOLATION: {{issue_key}} | {{get-issue.fields.summary}} | Advertiser: {{advertiser_id}} | Case: {{create-case.id}}'
  consumes:
  - type: http
    namespace: jira-policy
    baseUri: https://meta.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: sf-policy
    baseUri: https://meta.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: slack-policy
    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 → jira-content-policy-violation-escalation.yml

Queries Snowflake for WhatsApp Business API message volume analytics.

naftiko: '0.5'
info:
  label: Snowflake WhatsApp Message Volume Query
  description: Queries Snowflake for WhatsApp Business API message volume analytics.
  tags:
  - analytics
  - snowflake
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: wa-analytics
    port: 8080
    tools:
    - name: get-message-volume
      description: Given a date range, return WhatsApp message volume stats from Snowflake. Use for capacity planning.
      inputParameters:
      - name: date_from
        in: body
        type: string
        description: Start date (YYYY-MM-DD).
      call: snowflake-wa.run-query
      with:
        date_from: '{{date_from}}'
      outputParameters:
      - name: volume
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-wa
    baseUri: https://meta.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-whatsapp-message-volume-query.yml

Retrieves LinkedIn Campaign Manager performance metrics for sponsored content and posts a weekly summary to the B2B marketing Slack channel.

naftiko: '0.5'
info:
  label: LinkedIn Sponsored Content Performance
  description: Retrieves LinkedIn Campaign Manager performance metrics for sponsored content and posts a weekly summary to the B2B marketing Slack channel.
  tags:
  - marketing
  - linkedin
  - slack
  - reporting
  - social-media
capability:
  exposes:
  - type: mcp
    namespace: linkedin-marketing
    port: 8080
    tools:
    - name: digest-sponsored-content-performance
      description: Given a LinkedIn Campaign Manager account ID and date range, retrieve sponsored content performance metrics and post a formatted digest to the B2B marketing Slack channel.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The LinkedIn Campaign Manager account ID.
      - name: date_start
        in: body
        type: string
        description: Start date for the performance period (YYYY-MM-DD).
      - name: date_end
        in: body
        type: string
        description: End date for the performance period (YYYY-MM-DD).
      steps:
      - name: get-analytics
        type: call
        call: linkedin.get-campaign-analytics
        with:
          account_id: '{{account_id}}'
          start_date: '{{date_start}}'
          end_date: '{{date_end}}'
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: b2b-marketing
          text: 'LinkedIn Campaign Report ({{date_start}} to {{date_end}}): Impressions: {{get-analytics.impressions}} | Clicks: {{get-analytics.clicks}} | CTR: {{get-analytics.ctr}}% | Spend: ${{get-analytics.costInLocalCurrency}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: campaign-analytics
      path: /adAnalyticsV2
      operations:
      - name: get-campaign-analytics
        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 → linkedin-sponsored-content-performance.yml

Initiates annual performance reviews in Workday, creates tracking tasks, and notifies HR in Slack.

naftiko: '0.5'
info:
  label: Workday Annual Review Cycle Launcher
  description: Initiates annual performance reviews in Workday, creates tracking tasks, and notifies HR in Slack.
  tags:
  - hr
  - workday
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: review-ops
    port: 8080
    tools:
    - name: handle-review-launch
      description: Given a cycle name and date, create tracking and notify HR.
      inputParameters:
      - name: cycle_name
        in: body
        type: string
        description: Review cycle name.
      - name: target_date
        in: body
        type: string
        description: Target completion date.
      steps:
      - name: create-tracking
        type: call
        call: jira-hr.create-issue
        with:
          project_key: HR
          issuetype: Epic
          summary: 'Review: {{cycle_name}} — Due {{target_date}}'
      - name: notify-hr
        type: call
        call: slack-hr.post-message
        with:
          channel: hr-business-partners
          text: 'REVIEW CYCLE: {{cycle_name}} | Due: {{target_date}} | {{create-tracking.key}}'
  consumes:
  - type: http
    namespace: jira-hr
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-hr
    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 → workday-annual-review-cycle-launcher.yml

After a production incident is resolved, retrieves incident timeline from Datadog and uses Anthropic Claude to generate a structured post-mortem document posted to Slack.

naftiko: '0.5'
info:
  label: AI-Assisted Incident Post-Mortem
  description: After a production incident is resolved, retrieves incident timeline from Datadog and uses Anthropic Claude to generate a structured post-mortem document posted to Slack.
  tags:
  - ai
  - automation
  - anthropic
  - datadog
  - slack
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: ai-postmortem
    port: 8080
    tools:
    - name: generate-incident-postmortem
      description: Given a Datadog incident ID and ServiceNow incident number, retrieve the incident timeline and event log, use Anthropic Claude to generate a structured post-mortem with root cause and action items, and post it to the engineering Slack channel.
      inputParameters:
      - name: datadog_incident_id
        in: body
        type: string
        description: The Datadog incident ID with the event timeline.
      - name: servicenow_incident_number
        in: body
        type: string
        description: The ServiceNow incident number for the resolved incident.
      steps:
      - name: get-incident-events
        type: call
        call: datadog.get-incident-timeline
        with:
          incident_id: '{{datadog_incident_id}}'
      - name: generate-postmortem
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          prompt: 'Write a structured production incident post-mortem document with sections: Summary, Timeline, Root Cause, Contributing Factors, Impact, and Action Items. Incident data: {{get-incident-events.timeline}}'
      - name: post-postmortem
        type: call
        call: slack.post-message
        with:
          channel: incident-postmortems
          text: 'Post-Mortem Published - SNOW: {{servicenow_incident_number}}


            {{generate-postmortem.content[0].text}}'
  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: incident-timeline
      path: /incidents/{{incident_id}}/timeline
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident-timeline
        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: 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 → ai-assisted-incident-post-mortem.yml

Queries Snowflake for content moderation effectiveness metrics across platforms.

naftiko: '0.5'
info:
  label: Snowflake Content Moderation Metrics Query
  description: Queries Snowflake for content moderation effectiveness metrics across platforms.
  tags:
  - trust-safety
  - snowflake
  - moderation
capability:
  exposes:
  - type: mcp
    namespace: moderation-analytics
    port: 8080
    tools:
    - name: get-moderation-metrics
      description: Given a platform and period, return content moderation metrics from Snowflake.
      inputParameters:
      - name: platform
        in: body
        type: string
        description: Platform name.
      - name: period
        in: body
        type: string
        description: Reporting period.
      call: snowflake-mod.run-query
      with:
        platform: '{{platform}}'
        period: '{{period}}'
      outputParameters:
      - name: metrics
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-mod
    baseUri: https://meta.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-content-moderation-metrics-query.yml

Queries Datadog for Instagram API endpoint latency metrics.

naftiko: '0.5'
info:
  label: Datadog Instagram API Latency Check
  description: Queries Datadog for Instagram API endpoint latency metrics.
  tags:
  - platform
  - datadog
  - instagram
capability:
  exposes:
  - type: mcp
    namespace: ig-ops
    port: 8080
    tools:
    - name: get-api-latency
      description: Given an API endpoint name, return Instagram API latency metrics from Datadog. Use for SLA monitoring.
      inputParameters:
      - name: endpoint_name
        in: body
        type: string
        description: Instagram API endpoint name.
      call: dd-ig.get-metrics
      with:
        query: avg:instagram.api.latency{endpoint:{{endpoint_name}}}
      outputParameters:
      - name: series
        type: array
        mapping: $.series
  consumes:
  - type: http
    namespace: dd-ig
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      operations:
      - name: get-metrics
        method: GET
Open in Framework → View in Fleet → datadog-instagram-api-latency-check.yml

When an employee departure is confirmed in Workday, deactivates their Okta account, removes GitHub org membership, and creates a ServiceNow offboarding checklist.

naftiko: '0.5'
info:
  label: Employee Offboarding and Access Revocation
  description: When an employee departure is confirmed in Workday, deactivates their Okta account, removes GitHub org membership, and creates a ServiceNow offboarding checklist.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - github
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID and termination date, deactivate the Okta account, remove GitHub organization membership, and create a ServiceNow offboarding ticket.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID of the departing employee.
      - name: termination_date
        in: body
        type: string
        description: The employee's last working day in ISO 8601 format (YYYY-MM-DD).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          user_email: '{{get-employee.work_email}}'
      - name: remove-github
        type: call
        call: github.remove-org-member
        with:
          org: facebook
          username: '{{get-employee.github_username}}'
      - name: create-offboarding-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Offboarding: {{get-employee.displayName}} - {{termination_date}}'
          category: hr_offboarding
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: workers
      path: /meta/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://meta.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-lifecycle
      path: /users/{{user_id}}/lifecycle/deactivate
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-members
      path: /orgs/{{org}}/members/{{username}}
      inputParameters:
      - name: org
        in: path
      - name: username
        in: path
      operations:
      - name: remove-org-member
        method: DELETE
  - type: http
    namespace: servicenow
    baseUri: https://meta.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → employee-offboarding-and-access-revocation.yml

Checks CI status for a branch in the HHVM/Hack repository.

naftiko: '0.5'
info:
  label: GitHub Hack Language CI Status
  description: Checks CI status for a branch in the HHVM/Hack repository.
  tags:
  - engineering
  - github
  - hack
capability:
  exposes:
  - type: mcp
    namespace: hack-dev
    port: 8080
    tools:
    - name: get-hack-ci
      description: Given a branch name, return CI status for the Hack language repository.
      inputParameters:
      - name: branch_name
        in: body
        type: string
        description: Branch name.
      call: github-hack.get-branch
      with:
        branch_name: '{{branch_name}}'
      outputParameters:
      - name: branch
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: github-hack
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branches
      path: /repos/facebook/hhvm/branches/{{branch_name}}
      inputParameters:
      - name: branch_name
        in: path
      operations:
      - name: get-branch
        method: GET
Open in Framework → View in Fleet → github-hack-language-ci-status.yml

Orchestrates developer partner onboarding in Salesforce and notifies the partnerships team in Slack.

naftiko: '0.5'
info:
  label: Salesforce Partner Developer Onboarding
  description: Orchestrates developer partner onboarding in Salesforce and notifies the partnerships team in Slack.
  tags:
  - partnerships
  - salesforce
  - slack
  - developer
capability:
  exposes:
  - type: mcp
    namespace: dev-partner
    port: 8080
    tools:
    - name: handle-dev-onboarding
      description: Given partner details, create SF account and notify partnerships.
      inputParameters:
      - name: partner_name
        in: body
        type: string
        description: Partner name.
      - name: partner_type
        in: body
        type: string
        description: Partner type.
      steps:
      - name: create-account
        type: call
        call: sf-partner.create-account
        with:
          name: '{{partner_name}}'
          type: '{{partner_type}}'
      - name: notify-team
        type: call
        call: slack-partner.post-message
        with:
          channel: developer-partnerships
          text: 'NEW DEV PARTNER: {{partner_name}} | Type: {{partner_type}} | SF: {{create-account.id}}'
  consumes:
  - type: http
    namespace: sf-partner
    baseUri: https://meta.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: slack-partner
    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 → salesforce-partner-developer-onboarding.yml

When Datadog detects Horizon Worlds latency spikes, creates a Jira incident and notifies the VR team in Slack.

naftiko: '0.5'
info:
  label: Datadog Horizon Worlds Latency Alert
  description: When Datadog detects Horizon Worlds latency spikes, creates a Jira incident and notifies the VR team in Slack.
  tags:
  - vr
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: horizon-ops
    port: 8080
    tools:
    - name: handle-horizon-latency
      description: Given a Datadog monitor ID, create a Jira incident and notify VR team.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: Datadog monitor ID.
      steps:
      - name: get-monitor
        type: call
        call: dd-horizon.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: jira-horizon.create-issue
        with:
          project_key: HORIZON
          issuetype: Incident
          summary: 'Horizon latency: {{get-monitor.name}}'
          priority: High
      - name: notify-vr
        type: call
        call: slack-vr.post-message
        with:
          channel: horizon-engineering
          text: 'HORIZON LATENCY: {{get-monitor.name}} | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: dd-horizon
    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: jira-horizon
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-vr
    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 → datadog-horizon-worlds-latency-alert.yml

Queries Snowflake for privacy compliance metrics and posts to the privacy team Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Privacy Compliance Report
  description: Queries Snowflake for privacy compliance metrics and posts to the privacy team Slack channel.
  tags:
  - privacy
  - snowflake
  - slack
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: privacy-ops
    port: 8080
    tools:
    - name: handle-privacy-report
      description: Given a period, query privacy compliance metrics and post to Slack.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: query-compliance
        type: call
        call: snowflake-privacy.run-query
        with:
          period: '{{period}}'
      - name: post-report
        type: call
        call: slack-privacy.post-message
        with:
          channel: privacy-compliance
          text: 'Privacy Report ({{period}}): Data requests: {{query-compliance.total_requests}} | Processed: {{query-compliance.processed}} | SLA met: {{query-compliance.sla_met}}%'
  consumes:
  - type: http
    namespace: snowflake-privacy
    baseUri: https://meta.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: slack-privacy
    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 → snowflake-privacy-compliance-report.yml

Escalates support cases from Salesforce to Jira engineering and notifies in Slack.

naftiko: '0.5'
info:
  label: Salesforce Customer Support Case Escalation
  description: Escalates support cases from Salesforce to Jira engineering and notifies in Slack.
  tags:
  - support
  - salesforce
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: support-ops
    port: 8080
    tools:
    - name: handle-case-escalation
      description: Given a SF case ID, create Jira ticket and notify.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: Salesforce case ID.
      steps:
      - name: get-case
        type: call
        call: sf-support.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-ticket
        type: call
        call: jira-support.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: 'Escalation: {{get-case.Subject}}'
      - name: notify
        type: call
        call: slack-support.post-message
        with:
          channel: support-escalations
          text: 'ESCALATION: {{get-case.Subject}} | Case: {{case_id}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: sf-support
    baseUri: https://meta.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-support
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-support
    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 → salesforce-customer-support-case-escalation.yml

Orchestrates Jest framework releases from GitHub and notifies the developer experience Slack channel.

naftiko: '0.5'
info:
  label: GitHub Jest Testing Framework Release
  description: Orchestrates Jest framework releases from GitHub and notifies the developer experience Slack channel.
  tags:
  - developer-tools
  - github
  - slack
  - testing
capability:
  exposes:
  - type: mcp
    namespace: jest-release
    port: 8080
    tools:
    - name: handle-jest-release
      description: Given a release tag, create release and notify.
      inputParameters:
      - name: release_tag
        in: body
        type: string
        description: Release tag.
      steps:
      - name: get-release
        type: call
        call: github-jest.get-release
        with:
          tag: '{{release_tag}}'
      - name: notify
        type: call
        call: slack-dx.post-message
        with:
          channel: developer-experience
          text: 'Jest Release: {{release_tag}} | {{get-release.name}} | {{get-release.html_url}}'
  consumes:
  - type: http
    namespace: github-jest
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/facebook/jest/releases/tags/{{tag}}
      inputParameters:
      - name: tag
        in: path
      operations:
      - name: get-release
        method: GET
  - type: http
    namespace: slack-dx
    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-jest-testing-framework-release.yml

Tracks open source contributions across Meta repos on GitHub and posts to the open source Slack channel.

naftiko: '0.5'
info:
  label: GitHub Open Source Contribution Tracker
  description: Tracks open source contributions across Meta repos on GitHub and posts to the open source Slack channel.
  tags:
  - open-source
  - github
  - slack
  - community
capability:
  exposes:
  - type: mcp
    namespace: oss-ops
    port: 8080
    tools:
    - name: handle-oss-tracking
      description: Given a repo name, track contributions and post.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: Repository name.
      steps:
      - name: get-repo
        type: call
        call: github-oss.get-repo
        with:
          repo_name: '{{repo_name}}'
      - name: post-update
        type: call
        call: slack-oss.post-message
        with:
          channel: open-source
          text: 'OSS: {{repo_name}} | Stars: {{get-repo.stargazers_count}} | Forks: {{get-repo.forks_count}} | Issues: {{get-repo.open_issues_count}}'
  consumes:
  - type: http
    namespace: github-oss
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repos
      path: /repos/facebook/{{repo_name}}
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-repo
        method: GET
  - type: http
    namespace: slack-oss
    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-open-source-contribution-tracker.yml

Orchestrates contractor onboarding from Workday and notifies the hiring manager in Slack.

naftiko: '0.5'
info:
  label: Workday Contractor Onboarding
  description: Orchestrates contractor onboarding from Workday and notifies the hiring manager in Slack.
  tags:
  - hr
  - workday
  - slack
  - contractors
capability:
  exposes:
  - type: mcp
    namespace: contractor-ops
    port: 8080
    tools:
    - name: handle-contractor-start
      description: Given a worker ID, retrieve details and notify hiring manager.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID.
      steps:
      - name: get-worker
        type: call
        call: workday-contr.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: notify-manager
        type: call
        call: slack-contr.post-message
        with:
          channel: contractor-onboarding
          text: 'CONTRACTOR: {{get-worker.fullName}} | Role: {{get-worker.jobTitle}} | Provision access.'
  consumes:
  - type: http
    namespace: workday-contr
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: slack-contr
    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 → workday-contractor-onboarding.yml

When Datadog detects Marketplace API availability issues, creates a Jira incident and notifies in Slack.

naftiko: '0.5'
info:
  label: Datadog Marketplace API Availability Alert
  description: When Datadog detects Marketplace API availability issues, creates a Jira incident and notifies in Slack.
  tags:
  - platform
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: marketplace-ops
    port: 8080
    tools:
    - name: handle-marketplace-alert
      description: Given a monitor ID, create incident and notify.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: Datadog monitor ID.
      steps:
      - name: get-monitor
        type: call
        call: dd-market.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: jira-market.create-issue
        with:
          project_key: MKTPL
          issuetype: Incident
          summary: 'Marketplace API: {{get-monitor.name}}'
      - name: notify
        type: call
        call: slack-market.post-message
        with:
          channel: marketplace-ops
          text: 'MARKETPLACE ALERT: {{get-monitor.name}} | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: dd-market
    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: jira-market
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-market
    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 → datadog-marketplace-api-availability-alert.yml

Monitors Quest firmware rollout health via Datadog and reports to the VR team in Slack.

naftiko: '0.5'
info:
  label: Datadog Oculus Firmware Rollout Monitor
  description: Monitors Quest firmware rollout health via Datadog and reports to the VR team in Slack.
  tags:
  - vr
  - datadog
  - slack
  - firmware
capability:
  exposes:
  - type: mcp
    namespace: quest-firmware
    port: 8080
    tools:
    - name: handle-firmware-rollout
      description: Given a service tag and version, monitor rollout and report.
      inputParameters:
      - name: service_tag
        in: body
        type: string
        description: Datadog service tag.
      - name: firmware_version
        in: body
        type: string
        description: Firmware version.
      steps:
      - name: check-monitors
        type: call
        call: dd-quest.get-monitors
        with:
          tags: '{{service_tag}}'
      - name: post-status
        type: call
        call: slack-quest.post-message
        with:
          channel: quest-firmware
          text: 'Quest FW Rollout: {{firmware_version}} | Monitors: {{check-monitors.total_count}} | Alerts: {{check-monitors.alert_count}}'
  consumes:
  - type: http
    namespace: dd-quest
    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
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack-quest
    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 → datadog-oculus-firmware-rollout-monitor.yml

When Okta detects a suspicious login event, suspends the affected user account, creates a high-priority ServiceNow security incident, and alerts the security operations Slack channel.

naftiko: '0.5'
info:
  label: Okta Suspicious Login Security Response
  description: When Okta detects a suspicious login event, suspends the affected user account, creates a high-priority ServiceNow security incident, and alerts the security operations Slack channel.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - slack
  - siem
capability:
  exposes:
  - type: mcp
    namespace: security-response
    port: 8080
    tools:
    - name: respond-to-suspicious-login
      description: Given an Okta suspicious login event with user email and IP address, suspend the user account, create a ServiceNow security incident, and alert the security operations Slack channel.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The email of the user who triggered the suspicious login.
      - name: event_id
        in: body
        type: string
        description: The Okta system log event ID for the suspicious login.
      - name: ip_address
        in: body
        type: string
        description: The IP address from which the suspicious login was attempted.
      steps:
      - name: get-user
        type: call
        call: okta.get-user-by-email
        with:
          email: '{{user_email}}'
      - name: suspend-user
        type: call
        call: okta.suspend-user
        with:
          user_id: '{{get-user.id}}'
      - name: create-security-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Suspicious login: {{user_email}} from {{ip_address}}'
          urgency: '1'
          category: security
      - name: alert-soc
        type: call
        call: slack.post-message
        with:
          channel: security-operations
          text: 'SECURITY RESPONSE: User {{user_email}} suspended after suspicious login from {{ip_address}}. SNOW: {{create-security-incident.number}}'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://meta.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users-by-email
      path: /users
      operations:
      - name: get-user-by-email
        method: GET
    - name: user-suspend
      path: /users/{{user_id}}/lifecycle/suspend
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: suspend-user
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://meta.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      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
Open in Framework → View in Fleet → okta-suspicious-login-security-response.yml

Synchronizes a custom audience segment from Snowflake to the Meta Ads platform for retargeting campaigns.

naftiko: '0.5'
info:
  label: Advertising Audience Segment Sync
  description: Synchronizes a custom audience segment from Snowflake to the Meta Ads platform for retargeting campaigns.
  tags:
  - marketing
  - ads
  - snowflake
  - meta-graph
  - audience
capability:
  exposes:
  - type: mcp
    namespace: audience-ops
    port: 8080
    tools:
    - name: sync-audience-segment
      description: Given a Snowflake audience query and Meta Ads account ID, execute the query to retrieve the audience segment, then upload and update the custom audience in Meta Ads Manager.
      inputParameters:
      - name: ads_account_id
        in: body
        type: string
        description: The Meta Ads account ID to update the custom audience in.
      - name: custom_audience_id
        in: body
        type: string
        description: The existing Meta custom audience ID to sync to.
      - name: audience_query
        in: body
        type: string
        description: The Snowflake SQL query to retrieve the audience segment user IDs.
      steps:
      - name: get-audience
        type: call
        call: snowflake.execute-query
        with:
          query: '{{audience_query}}'
      - name: update-audience
        type: call
        call: meta-graph.update-custom-audience
        with:
          ads_account_id: '{{ads_account_id}}'
          audience_id: '{{custom_audience_id}}'
          users: '{{get-audience.results}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://meta.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: meta-graph
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_graph_token
    resources:
    - name: custom-audiences
      path: /{{audience_id}}/users
      inputParameters:
      - name: audience_id
        in: path
      operations:
      - name: update-custom-audience
        method: POST
Open in Framework → View in Fleet → advertising-audience-segment-sync.yml

Validates Llama model benchmarks in Snowflake before approving a GitHub release, with Slack notification.

naftiko: '0.5'
info:
  label: GitHub Llama Model Deployment Gate
  description: Validates Llama model benchmarks in Snowflake before approving a GitHub release, with Slack notification.
  tags:
  - ai
  - github
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: llama-deploy
    port: 8080
    tools:
    - name: handle-llama-deployment
      description: Given a release tag and model ID, validate benchmarks and notify the AI team.
      inputParameters:
      - name: release_tag
        in: body
        type: string
        description: GitHub release tag.
      - name: model_id
        in: body
        type: string
        description: Llama model identifier.
      steps:
      - name: check-benchmarks
        type: call
        call: snowflake-llama.run-query
        with:
          model_id: '{{model_id}}'
      - name: get-release
        type: call
        call: github-llama.get-release
        with:
          tag: '{{release_tag}}'
      - name: notify-ai
        type: call
        call: slack-ai.post-message
        with:
          channel: llama-deployments
          text: 'Llama Deploy Gate: {{release_tag}} | Model: {{model_id}} | Benchmark: {{check-benchmarks.score}} | Release: {{get-release.html_url}}'
  consumes:
  - type: http
    namespace: snowflake-llama
    baseUri: https://meta.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: github-llama
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/meta-llama/llama/releases/tags/{{tag}}
      inputParameters:
      - name: tag
        in: path
      operations:
      - name: get-release
        method: GET
  - type: http
    namespace: slack-ai
    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-llama-model-deployment-gate.yml

When a new hire starts in Workday, provisions access and notifies the team in Slack.

naftiko: '0.5'
info:
  label: Workday New Hire Onboarding Notification
  description: When a new hire starts in Workday, provisions access and notifies the team in Slack.
  tags:
  - hr
  - workday
  - slack
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: onboarding-ops
    port: 8080
    tools:
    - name: handle-new-hire
      description: Given a Workday employee ID, retrieve details and notify the team.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      steps:
      - name: get-worker
        type: call
        call: workday-onboard.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: notify-team
        type: call
        call: slack-onboard.post-message
        with:
          channel: new-hires
          text: 'NEW HIRE: {{get-worker.fullName}} | Role: {{get-worker.jobTitle}} | Please complete onboarding checklist.'
  consumes:
  - type: http
    namespace: workday-onboard
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    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: slack-onboard
    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 → workday-new-hire-onboarding-notification.yml

Checks employee benefits enrollment status in Workday.

naftiko: '0.5'
info:
  label: Workday Benefits Enrollment Check
  description: Checks employee benefits enrollment status in Workday.
  tags:
  - hr
  - workday
  - benefits
capability:
  exposes:
  - type: mcp
    namespace: benefits-ops
    port: 8080
    tools:
    - name: get-enrollment
      description: Given an employee ID, return benefits enrollment status from Workday.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID.
      call: workday-benefits.get-enrollment
      with:
        employee_id: '{{employee_id}}'
      outputParameters:
      - name: enrollment
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: workday-benefits
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: enrollments
      path: /benefitEnrollments/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-enrollment
        method: GET
Open in Framework → View in Fleet → workday-benefits-enrollment-check.yml

Orchestrates React Native releases by validating tests, creating a GitHub release, and notifying in Slack.

naftiko: '0.5'
info:
  label: GitHub React Native Release Pipeline
  description: Orchestrates React Native releases by validating tests, creating a GitHub release, and notifying in Slack.
  tags:
  - engineering
  - github
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: rn-release
    port: 8080
    tools:
    - name: handle-rn-release
      description: Given a version, validate tests and create release.
      inputParameters:
      - name: version
        in: body
        type: string
        description: Release version.
      steps:
      - name: validate
        type: call
        call: snowflake-rn.run-query
        with:
          version: '{{version}}'
      - name: create-release
        type: call
        call: github-rn.create-release
        with:
          tag_name: '{{version}}'
          name: React Native {{version}}
      - name: notify
        type: call
        call: slack-rn.post-message
        with:
          channel: react-native-releases
          text: 'RN Release: {{version}} | Tests: {{validate.pass_rate}}% | {{create-release.html_url}}'
  consumes:
  - type: http
    namespace: snowflake-rn
    baseUri: https://meta.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: github-rn
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/facebook/react-native/releases
      operations:
      - name: create-release
        method: POST
  - type: http
    namespace: slack-rn
    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-react-native-release-pipeline.yml

Checks Messenger service health status from Datadog monitors.

naftiko: '0.5'
info:
  label: Datadog Messenger Service Health Check
  description: Checks Messenger service health status from Datadog monitors.
  tags:
  - messaging
  - datadog
  - messenger
capability:
  exposes:
  - type: mcp
    namespace: messenger-ops
    port: 8080
    tools:
    - name: get-messenger-health
      description: Given a service name, return Messenger service health from Datadog. Use for reliability dashboards.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Messenger service name.
      call: dd-msg.get-monitors
      with:
        name: '{{service_name}}'
      outputParameters:
      - name: monitors
        type: array
        mapping: $.monitors
  consumes:
  - type: http
    namespace: dd-msg
    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
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-monitors
        method: GET
Open in Framework → View in Fleet → datadog-messenger-service-health-check.yml

Runs PyTorch benchmark validation from GitHub CI, logs to Snowflake, and posts to the AI team Slack channel.

naftiko: '0.5'
info:
  label: GitHub PyTorch Benchmark Pipeline
  description: Runs PyTorch benchmark validation from GitHub CI, logs to Snowflake, and posts to the AI team Slack channel.
  tags:
  - ai
  - github
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pytorch-bench
    port: 8080
    tools:
    - name: handle-pytorch-benchmark
      description: Given a run ID and model, check benchmark and post to Slack.
      inputParameters:
      - name: run_id
        in: body
        type: integer
        description: GitHub Actions run ID.
      - name: model_name
        in: body
        type: string
        description: Model name.
      steps:
      - name: get-run
        type: call
        call: github-pt.get-run
        with:
          run_id: '{{run_id}}'
      - name: log-results
        type: call
        call: snowflake-pt.run-query
        with:
          model: '{{model_name}}'
      - name: notify-ai
        type: call
        call: slack-pt.post-message
        with:
          channel: pytorch-benchmarks
          text: 'PyTorch Benchmark: {{model_name}} | Run: {{run_id}} | Status: {{get-run.conclusion}}'
  consumes:
  - type: http
    namespace: github-pt
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: runs
      path: /repos/pytorch/pytorch/actions/runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: snowflake-pt
    baseUri: https://meta.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: slack-pt
    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-pytorch-benchmark-pipeline.yml

When the Meta Graph API surfaces a flagged content report for an Instagram business account, creates a ServiceNow ticket and notifies the trust and safety team via Slack.

naftiko: '0.5'
info:
  label: Instagram Content Moderation Alert
  description: When the Meta Graph API surfaces a flagged content report for an Instagram business account, creates a ServiceNow ticket and notifies the trust and safety team via Slack.
  tags:
  - trust-safety
  - instagram
  - meta-graph
  - servicenow
  - slack
  - content-moderation
capability:
  exposes:
  - type: mcp
    namespace: content-safety
    port: 8080
    tools:
    - name: handle-content-moderation-flag
      description: Given a flagged content report ID and Instagram account ID, retrieve the flagged content details from the Meta Graph API, create a ServiceNow ticket, and alert the trust and safety Slack channel.
      inputParameters:
      - name: content_id
        in: body
        type: string
        description: The Instagram content ID that has been flagged for review.
      - name: account_id
        in: body
        type: string
        description: The Instagram business account ID associated with the content.
      - name: violation_type
        in: body
        type: string
        description: The type of policy violation detected (e.g., hate_speech, spam, misinformation).
      steps:
      - name: get-content
        type: call
        call: meta-graph.get-media-object
        with:
          content_id: '{{content_id}}'
      - name: create-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Content moderation flag: {{violation_type}} on account {{account_id}}'
          urgency: '2'
          category: trust_safety
      - name: notify-trust-safety
        type: call
        call: slack.post-message
        with:
          channel: trust-safety-ops
          text: 'Content Flagged: {{violation_type}} | Account: {{account_id}} | Content: {{content_id}} | Ticket: {{create-ticket.number}}'
  consumes:
  - type: http
    namespace: meta-graph
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_graph_token
    resources:
    - name: media
      path: /{{content_id}}
      inputParameters:
      - name: content_id
        in: path
      operations:
      - name: get-media-object
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://meta.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      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
Open in Framework → View in Fleet → instagram-content-moderation-alert.yml

Queries developer platform growth metrics from Snowflake and posts to developer relations Slack.

naftiko: '0.5'
info:
  label: Snowflake Developer Platform Growth Report
  description: Queries developer platform growth metrics from Snowflake and posts to developer relations Slack.
  tags:
  - devrel
  - snowflake
  - slack
  - growth
capability:
  exposes:
  - type: mcp
    namespace: devrel-ops
    port: 8080
    tools:
    - name: handle-devrel-growth
      description: Given a period, query developer growth and post.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Period.
      steps:
      - name: query-growth
        type: call
        call: snowflake-devrel.run-query
        with:
          period: '{{period}}'
      - name: post-report
        type: call
        call: slack-devrel.post-message
        with:
          channel: developer-relations
          text: 'DevRel ({{period}}): New devs: {{query-growth.new_devs}} | Active apps: {{query-growth.active_apps}} | API calls: {{query-growth.api_calls}}'
  consumes:
  - type: http
    namespace: snowflake-devrel
    baseUri: https://meta.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: slack-devrel
    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 → snowflake-developer-platform-growth-report.yml

Queries data center power consumption from Snowflake and posts to the sustainability Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Data Center Power Report
  description: Queries data center power consumption from Snowflake and posts to the sustainability Slack channel.
  tags:
  - sustainability
  - snowflake
  - slack
  - datacenter
capability:
  exposes:
  - type: mcp
    namespace: power-ops
    port: 8080
    tools:
    - name: handle-power-report
      description: Given a DC ID and period, query power data and post.
      inputParameters:
      - name: datacenter_id
        in: body
        type: string
        description: Data center ID.
      - name: period
        in: body
        type: string
        description: Period.
      steps:
      - name: query-power
        type: call
        call: snowflake-power.run-query
        with:
          dc: '{{datacenter_id}}'
          period: '{{period}}'
      - name: post-report
        type: call
        call: slack-green.post-message
        with:
          channel: sustainability
          text: 'Power ({{datacenter_id}}, {{period}}): Total: {{query-power.total_kwh}} kWh | PUE: {{query-power.pue}}'
  consumes:
  - type: http
    namespace: snowflake-power
    baseUri: https://meta.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: slack-green
    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 → snowflake-data-center-power-report.yml

Compiles agency partner revenue from Salesforce, enriches with Snowflake data, and posts to partnerships Slack.

naftiko: '0.5'
info:
  label: Salesforce Agency Partner Revenue Report
  description: Compiles agency partner revenue from Salesforce, enriches with Snowflake data, and posts to partnerships Slack.
  tags:
  - partnerships
  - salesforce
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: agency-ops
    port: 8080
    tools:
    - name: handle-agency-revenue
      description: Given a partner ID and period, compile revenue and post.
      inputParameters:
      - name: partner_id
        in: body
        type: string
        description: Partner account ID.
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: get-account
        type: call
        call: sf-agency.get-account
        with:
          account_id: '{{partner_id}}'
      - name: get-usage
        type: call
        call: snowflake-agency.run-query
        with:
          partner_id: '{{partner_id}}'
      - name: post-report
        type: call
        call: slack-agency.post-message
        with:
          channel: agency-partnerships
          text: 'Agency Revenue ({{period}}): {{get-account.Name}} | Revenue: ${{get-account.AnnualRevenue}} | Ad spend: ${{get-usage.total_spend}}'
  consumes:
  - type: http
    namespace: sf-agency
    baseUri: https://meta.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: snowflake-agency
    baseUri: https://meta.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: slack-agency
    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 → salesforce-agency-partner-revenue-report.yml

When CI fails in the React repository, creates a Jira bug and notifies the frontend team in Slack.

naftiko: '0.5'
info:
  label: GitHub React CI Failure Handler
  description: When CI fails in the React repository, creates a Jira bug and notifies the frontend team in Slack.
  tags:
  - engineering
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: react-ci
    port: 8080
    tools:
    - name: handle-react-ci-failure
      description: Given a GitHub run ID for a failed React CI, create a Jira bug and notify in Slack.
      inputParameters:
      - name: run_id
        in: body
        type: integer
        description: GitHub Actions run ID.
      steps:
      - name: get-run
        type: call
        call: github-react.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-bug
        type: call
        call: jira-react.create-issue
        with:
          project_key: REACT
          issuetype: Bug
          summary: 'CI failure: {{get-run.name}}'
      - name: notify-frontend
        type: call
        call: slack-react.post-message
        with:
          channel: react-engineering
          text: 'CI FAILURE: React | {{get-run.name}} | Jira: {{create-bug.key}}'
  consumes:
  - type: http
    namespace: github-react
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: runs
      path: /repos/facebook/react/actions/runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: jira-react
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-react
    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-react-ci-failure-handler.yml

Queries Snowflake for user growth metrics across Meta platforms.

naftiko: '0.5'
info:
  label: Snowflake User Growth Metrics Query
  description: Queries Snowflake for user growth metrics across Meta platforms.
  tags:
  - analytics
  - snowflake
  - growth
capability:
  exposes:
  - type: mcp
    namespace: growth-analytics
    port: 8080
    tools:
    - name: get-user-growth
      description: Given a platform and period, return user growth metrics from Snowflake. Use for product analytics.
      inputParameters:
      - name: platform
        in: body
        type: string
        description: Platform name (Facebook, Instagram, Threads).
      - name: period
        in: body
        type: string
        description: Reporting period.
      call: snowflake-growth.run-query
      with:
        platform: '{{platform}}'
        period: '{{period}}'
      outputParameters:
      - name: growth
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-growth
    baseUri: https://meta.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-user-growth-metrics-query.yml

Generates a sprint velocity report from Jira for an engineering team and posts the summary to their Slack channel.

naftiko: '0.5'
info:
  label: Jira Engineering Sprint Digest
  description: Generates a sprint velocity report from Jira for an engineering team and posts the summary to their Slack channel.
  tags:
  - devops
  - agile
  - jira
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: digest-sprint
      description: Given a Jira board ID and sprint ID, fetch completed and open issues, compute velocity, and post a formatted sprint summary to the team Slack channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: The Jira board ID for the team sprint.
      - name: sprint_id
        in: body
        type: string
        description: The Jira sprint ID to summarize.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel ID to post the sprint digest to.
      steps:
      - name: get-issues
        type: call
        call: jira.list-sprint-issues
        with:
          board_id: '{{board_id}}'
          sprint_id: '{{sprint_id}}'
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Sprint {{sprint_id}} Update: {{get-issues.done_count}} done, {{get-issues.inprogress_count}} in progress, {{get-issues.todo_count}} remaining. Velocity: {{get-issues.story_points_completed}} pts.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprint-issues
      path: /board/{{board_id}}/sprint/{{sprint_id}}/issue
      inputParameters:
      - name: board_id
        in: path
      - name: sprint_id
        in: path
      operations:
      - name: list-sprint-issues
        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 → jira-engineering-sprint-digest.yml

Triages Messenger bugs from Jira, creates Snowflake impact reports, and notifies the messaging team in Slack.

naftiko: '0.5'
info:
  label: Jira Messenger Bug Triage
  description: Triages Messenger bugs from Jira, creates Snowflake impact reports, and notifies the messaging team in Slack.
  tags:
  - messaging
  - jira
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: msg-triage
    port: 8080
    tools:
    - name: handle-messenger-triage
      description: Given a Jira issue key, assess impact and notify.
      inputParameters:
      - name: issue_key
        in: body
        type: string
        description: Jira issue key.
      steps:
      - name: get-issue
        type: call
        call: jira-msg.get-issue
        with:
          issue_key: '{{issue_key}}'
      - name: check-impact
        type: call
        call: snowflake-msg.run-query
        with:
          bug_id: '{{issue_key}}'
      - name: notify
        type: call
        call: slack-msg.post-message
        with:
          channel: messenger-engineering
          text: 'BUG TRIAGE: {{issue_key}} | {{get-issue.fields.summary}} | Affected: {{check-impact.affected_users}}'
  consumes:
  - type: http
    namespace: jira-msg
    baseUri: https://meta.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-msg
    baseUri: https://meta.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: slack-msg
    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 → jira-messenger-bug-triage.yml

Retrieves the current sprint status for the Reality Labs Jira board.

naftiko: '0.5'
info:
  label: Jira Reality Labs Sprint Status
  description: Retrieves the current sprint status for the Reality Labs Jira board.
  tags:
  - vr
  - jira
  - reality-labs
capability:
  exposes:
  - type: mcp
    namespace: rl-pm
    port: 8080
    tools:
    - name: get-rl-sprint
      description: Given a board ID, return the Reality Labs sprint status. Use for standup meetings.
      inputParameters:
      - name: board_id
        in: body
        type: integer
        description: Jira board ID.
      call: jira-rl.get-sprints
      with:
        board_id: '{{board_id}}'
      outputParameters:
      - name: sprints
        type: array
        mapping: $.values
  consumes:
  - type: http
    namespace: jira-rl
    baseUri: https://meta.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /board/{{board_id}}/sprint
      inputParameters:
      - name: board_id
        in: path
      operations:
      - name: get-sprints
        method: GET
Open in Framework → View in Fleet → jira-reality-labs-sprint-status.yml

Looks up advertiser account details in Salesforce for ad sales operations.

naftiko: '0.5'
info:
  label: Salesforce Advertiser Account Lookup
  description: Looks up advertiser account details in Salesforce for ad sales operations.
  tags:
  - sales
  - salesforce
  - advertising
capability:
  exposes:
  - type: mcp
    namespace: ad-sales
    port: 8080
    tools:
    - name: get-advertiser
      description: Given an account ID, return advertiser details from Salesforce. Use for ad sales qualification.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: Salesforce account ID.
      call: sf-ads.get-account
      with:
        account_id: '{{account_id}}'
      outputParameters:
      - name: account
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: sf-ads
    baseUri: https://meta.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-advertiser-account-lookup.yml

Returns the count of open job requisitions in Workday for hiring pipeline tracking.

naftiko: '0.5'
info:
  label: Workday Open Requisitions Count
  description: Returns the count of open job requisitions in Workday for hiring pipeline tracking.
  tags:
  - hr
  - workday
  - recruiting
capability:
  exposes:
  - type: mcp
    namespace: talent-ops
    port: 8080
    tools:
    - name: get-open-reqs
      description: Given a team name, return open requisitions from Workday. Use for hiring dashboards.
      inputParameters:
      - name: team
        in: body
        type: string
        description: Team name.
      call: workday-recruit.get-requisitions
      with:
        team: '{{team}}'
      outputParameters:
      - name: requisitions
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: workday-recruit
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: requisitions
      path: /jobRequisitions
      inputParameters:
      - name: team
        in: query
      operations:
      - name: get-requisitions
        method: GET
Open in Framework → View in Fleet → workday-open-requisitions-count.yml

Retrieves a GitHub pull request diff and uses the Anthropic API to generate a structured code review summary, posting it as a PR comment.

naftiko: '0.5'
info:
  label: AI-Assisted Code Review Summary
  description: Retrieves a GitHub pull request diff and uses the Anthropic API to generate a structured code review summary, posting it as a PR comment.
  tags:
  - ai
  - automation
  - anthropic
  - github
  - code-review
  - devops
capability:
  exposes:
  - type: mcp
    namespace: ai-code-review
    port: 8080
    tools:
    - name: summarize-pull-request
      description: Given a GitHub pull request URL, retrieve the PR diff, generate a structured code review summary using Anthropic Claude, and post it as a comment on the pull request.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository containing the pull request (e.g., facebook/react).
      - name: pull_request_number
        in: body
        type: integer
        description: The pull request number to review.
      steps:
      - name: get-pr-diff
        type: call
        call: github.get-pull-request-diff
        with:
          repository: '{{repository}}'
          pull_number: '{{pull_request_number}}'
      - name: generate-review
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          prompt: 'Review this pull request diff and provide a structured summary covering: 1) What changed and why, 2) Potential issues or risks, 3) Suggestions for improvement. Diff: {{get-pr-diff.diff}}'
      - name: post-comment
        type: call
        call: github.create-pr-comment
        with:
          repository: '{{repository}}'
          pull_number: '{{pull_request_number}}'
          body: '## AI Code Review Summary


            {{generate-review.content[0].text}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-request-diff
      path: /repos/{{repository}}/pulls/{{pull_number}}
      inputParameters:
      - name: repository
        in: path
      - name: pull_number
        in: path
      operations:
      - name: get-pull-request-diff
        method: GET
    - name: pr-comments
      path: /repos/{{repository}}/issues/{{pull_number}}/comments
      inputParameters:
      - name: repository
        in: path
      - name: pull_number
        in: path
      operations:
      - name: create-pr-comment
        method: POST
  - 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-code-review-summary.yml

Checks WhatsApp end-to-end encryption service health from Datadog and notifies security in Slack.

naftiko: '0.5'
info:
  label: Datadog WhatsApp Encryption Health Check
  description: Checks WhatsApp end-to-end encryption service health from Datadog and notifies security in Slack.
  tags:
  - security
  - datadog
  - slack
  - whatsapp
capability:
  exposes:
  - type: mcp
    namespace: wa-security
    port: 8080
    tools:
    - name: handle-encryption-health
      description: Given a service tag, check encryption health and notify.
      inputParameters:
      - name: service_tag
        in: body
        type: string
        description: Datadog service tag.
      steps:
      - name: check-monitors
        type: call
        call: dd-wa-enc.get-monitors
        with:
          tags: '{{service_tag}}'
      - name: post-status
        type: call
        call: slack-wa-sec.post-message
        with:
          channel: whatsapp-security
          text: 'WA Encryption Health: Monitors: {{check-monitors.total_count}} | Alerts: {{check-monitors.alert_count}}'
  consumes:
  - type: http
    namespace: dd-wa-enc
    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
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack-wa-sec
    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 → datadog-whatsapp-encryption-health-check.yml

Tracks compliance audit items in Jira and posts updates to the compliance Slack channel.

naftiko: '0.5'
info:
  label: Jira Compliance Audit Tracker
  description: Tracks compliance audit items in Jira and posts updates to the compliance Slack channel.
  tags:
  - compliance
  - jira
  - slack
  - audit
capability:
  exposes:
  - type: mcp
    namespace: compliance-ops
    port: 8080
    tools:
    - name: handle-audit-tracking
      description: Given a project key, track audit items.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      steps:
      - name: search-items
        type: call
        call: jira-comp.search-issues
        with:
          jql: project = {{project_key}} AND status != Done
      - name: post-status
        type: call
        call: slack-comp.post-message
        with:
          channel: compliance
          text: 'Audit: {{project_key}} | Open: {{search-items.total}}'
  consumes:
  - type: http
    namespace: jira-comp
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: slack-comp
    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 → jira-compliance-audit-tracker.yml

Compiles quarterly roadmap progress from Jira epics and posts to the executive Slack channel.

naftiko: '0.5'
info:
  label: Jira Quarterly Roadmap Report
  description: Compiles quarterly roadmap progress from Jira epics and posts to the executive Slack channel.
  tags:
  - project-management
  - jira
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: roadmap-ops
    port: 8080
    tools:
    - name: handle-roadmap
      description: Given a project key and quarter, compile roadmap progress.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      - name: quarter
        in: body
        type: string
        description: Quarter identifier.
      steps:
      - name: search-epics
        type: call
        call: jira-roadmap.search-issues
        with:
          jql: project = {{project_key}} AND type = Epic
      - name: post-summary
        type: call
        call: slack-exec.post-message
        with:
          channel: executive-updates
          text: 'Roadmap ({{quarter}}): {{project_key}} | Epics: {{search-epics.total}}'
  consumes:
  - type: http
    namespace: jira-roadmap
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: slack-exec
    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 → jira-quarterly-roadmap-report.yml

When Datadog detects CDN performance issues for Stories, creates Jira incident and notifies in Slack.

naftiko: '0.5'
info:
  label: Datadog Stories CDN Performance Alert
  description: When Datadog detects CDN performance issues for Stories, creates Jira incident and notifies in Slack.
  tags:
  - infrastructure
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cdn-ops
    port: 8080
    tools:
    - name: handle-cdn-alert
      description: Given a monitor ID, create Jira incident and notify CDN team.
      inputParameters:
      - name: monitor_id
        in: body
        type: integer
        description: Datadog monitor ID.
      steps:
      - name: get-monitor
        type: call
        call: dd-cdn.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: jira-cdn.create-issue
        with:
          project_key: CDN
          issuetype: Incident
          summary: 'Stories CDN: {{get-monitor.name}}'
      - name: notify-cdn
        type: call
        call: slack-cdn.post-message
        with:
          channel: cdn-engineering
          text: 'CDN ALERT: {{get-monitor.name}} | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: dd-cdn
    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: jira-cdn
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-cdn
    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 → datadog-stories-cdn-performance-alert.yml

Orchestrates Relay framework releases from GitHub and notifies the developer experience Slack channel.

naftiko: '0.5'
info:
  label: GitHub GraphQL Relay Release
  description: Orchestrates Relay framework releases from GitHub and notifies the developer experience Slack channel.
  tags:
  - developer-tools
  - github
  - slack
  - graphql
capability:
  exposes:
  - type: mcp
    namespace: relay-release
    port: 8080
    tools:
    - name: handle-relay-release
      description: Given a tag, check release and notify.
      inputParameters:
      - name: release_tag
        in: body
        type: string
        description: Release tag.
      steps:
      - name: get-release
        type: call
        call: github-relay.get-release
        with:
          tag: '{{release_tag}}'
      - name: notify
        type: call
        call: slack-relay.post-message
        with:
          channel: developer-experience
          text: 'Relay Release: {{release_tag}} | {{get-release.name}} | {{get-release.html_url}}'
  consumes:
  - type: http
    namespace: github-relay
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/facebook/relay/releases/tags/{{tag}}
      inputParameters:
      - name: tag
        in: path
      operations:
      - name: get-release
        method: GET
  - type: http
    namespace: slack-relay
    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-graphql-relay-release.yml

Pulls demographic and interest audience insights from the Meta Graph API for an ad account and posts a weekly summary to the ads strategy Slack channel.

naftiko: '0.5'
info:
  label: Meta Ads Audience Insights Report
  description: Pulls demographic and interest audience insights from the Meta Graph API for an ad account and posts a weekly summary to the ads strategy Slack channel.
  tags:
  - marketing
  - meta-ads
  - meta-graph
  - slack
  - audience
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: audience-insights
    port: 8080
    tools:
    - name: publish-audience-insights-report
      description: Given a Meta Ads account ID and date range, retrieve audience demographic and interest breakdown data and post a weekly insights summary to the ads strategy Slack channel.
      inputParameters:
      - name: ad_account_id
        in: body
        type: string
        description: 'The Meta Ads account ID (format: act_XXXXXXXXX).'
      - name: date_start
        in: body
        type: string
        description: Start date for the insights period (YYYY-MM-DD).
      - name: date_end
        in: body
        type: string
        description: End date for the insights period (YYYY-MM-DD).
      steps:
      - name: get-audience-insights
        type: call
        call: meta-graph.get-audience-insights
        with:
          ad_account_id: '{{ad_account_id}}'
          date_start: '{{date_start}}'
          date_end: '{{date_end}}'
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: ads-strategy
          text: 'Audience Insights ({{date_start}} to {{date_end}}): Top age group: {{get-audience-insights.top_age_group}} | Top country: {{get-audience-insights.top_country}} | Top interest: {{get-audience-insights.top_interest}}'
  consumes:
  - type: http
    namespace: meta-graph
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_graph_token
    resources:
    - name: audience-insights
      path: /{{ad_account_id}}/insights
      inputParameters:
      - name: ad_account_id
        in: path
      operations:
      - name: get-audience-insights
        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 → meta-ads-audience-insights-report.yml

Pulls diversity metrics from Workday and posts to the HR leadership Slack channel.

naftiko: '0.5'
info:
  label: Workday Diversity Metrics Report
  description: Pulls diversity metrics from Workday and posts to the HR leadership Slack channel.
  tags:
  - hr
  - workday
  - slack
  - dei
capability:
  exposes:
  - type: mcp
    namespace: dei-ops
    port: 8080
    tools:
    - name: handle-dei-report
      description: Given a quarter, pull diversity metrics and post to HR leadership.
      inputParameters:
      - name: quarter
        in: body
        type: string
        description: Quarter identifier.
      steps:
      - name: get-metrics
        type: call
        call: workday-dei.get-report
        with:
          quarter: '{{quarter}}'
      - name: post-report
        type: call
        call: slack-dei.post-message
        with:
          channel: hr-leadership
          text: 'DEI ({{quarter}}): Headcount: {{get-metrics.total}} | Gender: {{get-metrics.gender_ratio}}'
  consumes:
  - type: http
    namespace: workday-dei
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /diversityMetrics
      inputParameters:
      - name: quarter
        in: query
      operations:
      - name: get-report
        method: GET
  - type: http
    namespace: slack-dei
    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 → workday-diversity-metrics-report.yml

When a Terraform PR is opened, validates and posts summary to platform Slack.

naftiko: '0.5'
info:
  label: GitHub Infra Terraform Review
  description: When a Terraform PR is opened, validates and posts summary to platform Slack.
  tags:
  - infrastructure
  - github
  - slack
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: infra-review
    port: 8080
    tools:
    - name: handle-terraform-pr
      description: Given a PR number, check status and post review to Slack.
      inputParameters:
      - name: pr_number
        in: body
        type: integer
        description: PR number.
      steps:
      - name: get-pr
        type: call
        call: github-infra.get-pr
        with:
          pr_number: '{{pr_number}}'
      - name: notify-platform
        type: call
        call: slack-infra.post-message
        with:
          channel: platform-engineering
          text: 'Terraform PR: #{{pr_number}} | {{get-pr.title}} | {{get-pr.html_url}}'
  consumes:
  - type: http
    namespace: github-infra
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/facebook/infrastructure/pulls/{{pr_number}}
      inputParameters:
      - name: pr_number
        in: path
      operations:
      - name: get-pr
        method: GET
  - type: http
    namespace: slack-infra
    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-infra-terraform-review.yml

Checks the News Feed ranking service SLO status from Datadog.

naftiko: '0.5'
info:
  label: Datadog News Feed Ranking SLO Check
  description: Checks the News Feed ranking service SLO status from Datadog.
  tags:
  - platform
  - datadog
  - news-feed
capability:
  exposes:
  - type: mcp
    namespace: feed-ops
    port: 8080
    tools:
    - name: get-feed-slo
      description: Given a Datadog SLO ID, return News Feed ranking SLO status. Use for reliability tracking.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: Datadog SLO ID.
      call: dd-feed.get-slo
      with:
        slo_id: '{{slo_id}}'
      outputParameters:
      - name: slo
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: dd-feed
    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/{{slo_id}}
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo
        method: GET
Open in Framework → View in Fleet → datadog-news-feed-ranking-slo-check.yml

Queries Snowflake for advertising revenue analytics by platform and region.

naftiko: '0.5'
info:
  label: Snowflake Ad Revenue Analytics Query
  description: Queries Snowflake for advertising revenue analytics by platform and region.
  tags:
  - analytics
  - snowflake
  - advertising
capability:
  exposes:
  - type: mcp
    namespace: ad-analytics
    port: 8080
    tools:
    - name: get-ad-revenue
      description: Given a platform and region, return ad revenue analytics from Snowflake. Use for business intelligence dashboards.
      inputParameters:
      - name: platform
        in: body
        type: string
        description: Platform (e.g. Facebook, Instagram, WhatsApp).
      - name: region
        in: body
        type: string
        description: Geographic region.
      call: snowflake-ads.run-query
      with:
        platform: '{{platform}}'
        region: '{{region}}'
      outputParameters:
      - name: revenue
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-ads
    baseUri: https://meta.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-ad-revenue-analytics-query.yml

Retrieves the latest PyTorch release information from GitHub.

naftiko: '0.5'
info:
  label: GitHub PyTorch Release Tag Lookup
  description: Retrieves the latest PyTorch release information from GitHub.
  tags:
  - ai
  - github
  - pytorch
capability:
  exposes:
  - type: mcp
    namespace: pytorch-ops
    port: 8080
    tools:
    - name: get-pytorch-release
      description: Return the latest PyTorch release from GitHub. Use for framework version tracking.
      inputParameters:
      - name: repo_name
        in: body
        type: string
        description: Repository name (e.g. pytorch).
      call: github-pt.get-release
      with:
        repo_name: '{{repo_name}}'
      outputParameters:
      - name: release
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: github-pt
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/pytorch/{{repo_name}}/releases/latest
      inputParameters:
      - name: repo_name
        in: path
      operations:
      - name: get-release
        method: GET
Open in Framework → View in Fleet → github-pytorch-release-tag-lookup.yml

Queries Snowflake for advertising fraud detection metrics and posts to the trust and safety Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Ad Fraud Detection Report
  description: Queries Snowflake for advertising fraud detection metrics and posts to the trust and safety Slack channel.
  tags:
  - trust-safety
  - snowflake
  - slack
  - advertising
capability:
  exposes:
  - type: mcp
    namespace: fraud-ops
    port: 8080
    tools:
    - name: handle-fraud-report
      description: Given a period, query ad fraud metrics and post to trust and safety.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: query-fraud
        type: call
        call: snowflake-fraud.run-query
        with:
          period: '{{period}}'
      - name: post-report
        type: call
        call: slack-trust.post-message
        with:
          channel: trust-safety
          text: 'Ad Fraud Report ({{period}}): Flagged: {{query-fraud.flagged_count}} | Blocked: {{query-fraud.blocked_count}} | Rate: {{query-fraud.fraud_rate}}%'
  consumes:
  - type: http
    namespace: snowflake-fraud
    baseUri: https://meta.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: slack-trust
    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 → snowflake-ad-fraud-detection-report.yml

Looks up enterprise messaging deal details in Salesforce for WhatsApp Business sales.

naftiko: '0.5'
info:
  label: Salesforce Enterprise Messaging Deal Lookup
  description: Looks up enterprise messaging deal details in Salesforce for WhatsApp Business sales.
  tags:
  - sales
  - salesforce
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: msg-sales
    port: 8080
    tools:
    - name: get-messaging-deal
      description: Given an opportunity ID, return enterprise messaging deal details. Use for deal tracking.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      call: sf-msg.get-opportunity
      with:
        opportunity_id: '{{opportunity_id}}'
      outputParameters:
      - name: opportunity
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: sf-msg
    baseUri: https://meta.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
Open in Framework → View in Fleet → salesforce-enterprise-messaging-deal-lookup.yml

Queries Reels engagement analytics from Snowflake and posts to the product Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Reels Engagement Analytics
  description: Queries Reels engagement analytics from Snowflake and posts to the product Slack channel.
  tags:
  - product
  - snowflake
  - slack
  - reels
capability:
  exposes:
  - type: mcp
    namespace: reels-analytics
    port: 8080
    tools:
    - name: handle-reels-analytics
      description: Given a period, query Reels engagement and post to Slack.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: query-engagement
        type: call
        call: snowflake-reels.run-query
        with:
          period: '{{period}}'
      - name: post-report
        type: call
        call: slack-reels.post-message
        with:
          channel: reels-product
          text: 'Reels ({{period}}): Views: {{query-engagement.total_views}} | Shares: {{query-engagement.shares}} | Completion: {{query-engagement.completion_rate}}%'
  consumes:
  - type: http
    namespace: snowflake-reels
    baseUri: https://meta.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: slack-reels
    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 → snowflake-reels-engagement-analytics.yml

Retrieves current engineering team headcount from Workday by department.

naftiko: '0.5'
info:
  label: Workday Engineering Headcount Snapshot
  description: Retrieves current engineering team headcount from Workday by department.
  tags:
  - hr
  - workday
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: hr-analytics
    port: 8080
    tools:
    - name: get-eng-headcount
      description: Given a department, return current engineering headcount from Workday. Use for workforce planning.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name.
      call: workday-eng.get-headcount
      with:
        department: '{{department}}'
      outputParameters:
      - name: headcount
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: workday-eng
    baseUri: https://wd5-impl-services1.workday.com/ccx/api/v1/meta
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: headcount
      path: /headcountReport
      inputParameters:
      - name: department
        in: query
      operations:
      - name: get-headcount
        method: GET
Open in Framework → View in Fleet → workday-engineering-headcount-snapshot.yml

Retrieves the review status of a pull request in the React Native repository.

naftiko: '0.5'
info:
  label: GitHub React Native PR Status
  description: Retrieves the review status of a pull request in the React Native repository.
  tags:
  - engineering
  - github
  - react-native
capability:
  exposes:
  - type: mcp
    namespace: rn-dev
    port: 8080
    tools:
    - name: get-rn-pr
      description: Given a PR number, return the React Native PR review status. Use for merge readiness checks.
      inputParameters:
      - name: pr_number
        in: body
        type: integer
        description: Pull request number.
      call: github-rn.get-pr
      with:
        pr_number: '{{pr_number}}'
      outputParameters:
      - name: pr
        type: object
        mapping: $
  consumes:
  - type: http
    namespace: github-rn
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/facebook/react-native/pulls/{{pr_number}}
      inputParameters:
      - name: pr_number
        in: path
      operations:
      - name: get-pr
        method: GET
Open in Framework → View in Fleet → github-react-native-pr-status.yml

When a high-value ad deal is created in Salesforce, creates Jira delivery epic and alerts sales leadership in Slack.

naftiko: '0.5'
info:
  label: Salesforce High-Value Advertiser Alert
  description: When a high-value ad deal is created in Salesforce, creates Jira delivery epic and alerts sales leadership in Slack.
  tags:
  - sales
  - salesforce
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ad-deals
    port: 8080
    tools:
    - name: handle-high-value-deal
      description: Given a Salesforce opportunity ID, create a delivery epic and notify leadership.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID.
      steps:
      - name: get-opp
        type: call
        call: sf-deals.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-epic
        type: call
        call: jira-deals.create-issue
        with:
          project_key: ADS
          issuetype: Epic
          summary: 'Ad delivery: {{get-opp.Name}} — ${{get-opp.Amount}}'
      - name: notify-leadership
        type: call
        call: slack-sales.post-message
        with:
          channel: sales-leadership
          text: 'HIGH-VALUE AD DEAL: {{get-opp.Name}} | ${{get-opp.Amount}} | Jira: {{create-epic.key}}'
  consumes:
  - type: http
    namespace: sf-deals
    baseUri: https://meta.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: jira-deals
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-sales
    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 → salesforce-high-value-advertiser-alert.yml

Generates AI training cost analytics from Snowflake and posts to the finance Slack channel.

naftiko: '0.5'
info:
  label: Snowflake AI Model Training Cost Report
  description: Generates AI training cost analytics from Snowflake and posts to the finance Slack channel.
  tags:
  - finance
  - snowflake
  - slack
  - ai
capability:
  exposes:
  - type: mcp
    namespace: ai-finance
    port: 8080
    tools:
    - name: handle-training-costs
      description: Given a period, generate training cost report.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: query-costs
        type: call
        call: snowflake-ai-cost.run-query
        with:
          period: '{{period}}'
      - name: post-report
        type: call
        call: slack-fin.post-message
        with:
          channel: finance-ops
          text: 'AI Training Costs ({{period}}): Total: ${{query-costs.total}} | GPU-hours: {{query-costs.gpu_hours}} | Cost/hour: ${{query-costs.cost_per_hour}}'
  consumes:
  - type: http
    namespace: snowflake-ai-cost
    baseUri: https://meta.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: slack-fin
    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 → snowflake-ai-model-training-cost-report.yml

When a new engineering position is approved in Workday, creates a GitHub team for the role and opens a Jira recruiting task for the talent acquisition team.

naftiko: '0.5'
info:
  label: Workday Job Requisition to GitHub Team
  description: When a new engineering position is approved in Workday, creates a GitHub team for the role and opens a Jira recruiting task for the talent acquisition team.
  tags:
  - hr
  - recruiting
  - workday
  - github
  - jira
capability:
  exposes:
  - type: mcp
    namespace: talent-acquisition
    port: 8080
    tools:
    - name: create-engineering-requisition
      description: Given a Workday job requisition ID for an engineering role, retrieve requisition details, create a GitHub team for the role, and create a Jira recruiting task.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday position requisition ID for the engineering role.
      steps:
      - name: get-requisition
        type: call
        call: workday.get-job-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: create-github-team
        type: call
        call: github.create-team
        with:
          org: facebook
          name: candidate-{{requisition_id}}
          description: Interview team for {{get-requisition.job_title}}
      - name: create-jira-task
        type: call
        call: jira.create-issue
        with:
          project_key: TA
          issuetype: Task
          summary: 'Recruit: {{get-requisition.job_title}} - {{get-requisition.department}}'
          description: 'Workday Req: {{requisition_id}} | Team: {{get-requisition.department}} | Level: {{get-requisition.job_level}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: job-requisitions
      path: /meta/jobRequisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-job-requisition
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: teams
      path: /orgs/{{org}}/teams
      inputParameters:
      - name: org
        in: path
      operations:
      - name: create-team
        method: POST
  - type: http
    namespace: jira
    baseUri: https://meta.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-job-requisition-to-github-team.yml

When a Meta Quest hardware defect report crosses a volume threshold, creates a high-priority ServiceNow incident, opens a Jira engineering ticket, and alerts the Reality Labs product team via Slack.

naftiko: '0.5'
info:
  label: Reality Labs Hardware Defect Escalation
  description: When a Meta Quest hardware defect report crosses a volume threshold, creates a high-priority ServiceNow incident, opens a Jira engineering ticket, and alerts the Reality Labs product team via Slack.
  tags:
  - manufacturing
  - quality
  - servicenow
  - jira
  - slack
  - reality-labs
capability:
  exposes:
  - type: mcp
    namespace: hardware-quality
    port: 8080
    tools:
    - name: escalate-hardware-defect
      description: Given a Quest hardware defect type, device model, and defect count, create a high-priority ServiceNow incident, open a Jira engineering ticket, and alert the Reality Labs product Slack channel.
      inputParameters:
      - name: device_model
        in: body
        type: string
        description: The Meta Quest device model affected (e.g., Quest 3, Quest Pro).
      - name: defect_type
        in: body
        type: string
        description: The type of hardware defect reported (e.g., display_failure, controller_drift).
      - name: defect_count
        in: body
        type: integer
        description: Number of units reported with this defect in the current period.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Hardware defect escalation: {{device_model}} - {{defect_type}}'
          urgency: '1'
          category: hardware_quality
      - name: create-eng-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: RL
          issuetype: Bug
          summary: 'Hardware defect: {{device_model}} {{defect_type}} - {{defect_count}} units affected'
          description: 'SNOW: {{create-incident.number}} | Device: {{device_model}} | Defect: {{defect_type}} | Count: {{defect_count}}'
      - name: notify-product-team
        type: call
        call: slack.post-message
        with:
          channel: reality-labs-product
          text: 'HARDWARE ALERT: {{device_model}} reporting {{defect_count}} units with {{defect_type}}. SNOW: {{create-incident.number}} | Jira: {{create-eng-ticket.key}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://meta.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: jira
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → reality-labs-hardware-defect-escalation.yml

Validates Instagram feature release readiness from Jira and Datadog, then posts to the Instagram Slack channel.

naftiko: '0.5'
info:
  label: Jira Instagram Feature Release Checklist
  description: Validates Instagram feature release readiness from Jira and Datadog, then posts to the Instagram Slack channel.
  tags:
  - instagram
  - jira
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: ig-release
    port: 8080
    tools:
    - name: handle-ig-release
      description: Given a Jira fix version and Datadog service tag, validate readiness and post to Slack.
      inputParameters:
      - name: fix_version
        in: body
        type: string
        description: Jira fix version.
      - name: service_tag
        in: body
        type: string
        description: Datadog service tag.
      steps:
      - name: check-tickets
        type: call
        call: jira-ig.search-issues
        with:
          jql: fixVersion = {{fix_version}} AND status != Done
      - name: check-health
        type: call
        call: dd-ig.get-monitors
        with:
          tags: '{{service_tag}}'
      - name: post-readiness
        type: call
        call: slack-ig.post-message
        with:
          channel: instagram-releases
          text: 'IG Release: {{fix_version}} | Open: {{check-tickets.total}} | Alerts: {{check-health.alert_count}}'
  consumes:
  - type: http
    namespace: jira-ig
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: dd-ig
    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
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack-ig
    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 → jira-instagram-feature-release-checklist.yml

Tracks AI ethics review requests in Jira and notifies the responsible AI team in Slack.

naftiko: '0.5'
info:
  label: Jira AI Ethics Review Workflow
  description: Tracks AI ethics review requests in Jira and notifies the responsible AI team in Slack.
  tags:
  - ethics
  - jira
  - slack
  - ai
capability:
  exposes:
  - type: mcp
    namespace: ethics-ops
    port: 8080
    tools:
    - name: handle-ethics-review
      description: Given a project key, track ethics reviews.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key.
      steps:
      - name: search-reviews
        type: call
        call: jira-ethics.search-issues
        with:
          jql: project = {{project_key}} AND status = 'Pending Review'
      - name: post-status
        type: call
        call: slack-ethics.post-message
        with:
          channel: responsible-ai
          text: 'Ethics Queue: {{search-reviews.total}} pending reviews'
  consumes:
  - type: http
    namespace: jira-ethics
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: slack-ethics
    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 → jira-ai-ethics-review-workflow.yml

Returns the count of open bugs in the Metaverse platform Jira project.

naftiko: '0.5'
info:
  label: Jira Metaverse Platform Bug Count
  description: Returns the count of open bugs in the Metaverse platform Jira project.
  tags:
  - vr
  - jira
  - metaverse
capability:
  exposes:
  - type: mcp
    namespace: metaverse-eng
    port: 8080
    tools:
    - name: get-metaverse-bugs
      description: Given a priority, return open Metaverse platform bugs from Jira. Use for quality dashboards.
      inputParameters:
      - name: priority
        in: body
        type: string
        description: Bug priority filter.
      call: jira-mv.search-issues
      with:
        jql: project = MV AND type = Bug AND status != Done AND priority = {{priority}}
      outputParameters:
      - name: total
        type: number
        mapping: $.total
  consumes:
  - type: http
    namespace: jira-mv
    baseUri: https://meta.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
Open in Framework → View in Fleet → jira-metaverse-platform-bug-count.yml

Compiles SMB advertiser health scores from Salesforce and posts to the SMB team Slack channel.

naftiko: '0.5'
info:
  label: Salesforce SMB Advertiser Health Digest
  description: Compiles SMB advertiser health scores from Salesforce and posts to the SMB team Slack channel.
  tags:
  - customer-success
  - salesforce
  - slack
  - smb
capability:
  exposes:
  - type: mcp
    namespace: smb-ops
    port: 8080
    tools:
    - name: handle-smb-health
      description: Given a segment, compile health scores and post.
      inputParameters:
      - name: segment
        in: body
        type: string
        description: Customer segment.
      steps:
      - name: query-health
        type: call
        call: sf-smb.query-accounts
        with:
          segment: '{{segment}}'
      - name: post-digest
        type: call
        call: slack-smb.post-message
        with:
          channel: smb-success
          text: 'SMB Health ({{segment}}): Accounts: {{query-health.totalSize}} | At-risk: {{query-health.at_risk}} | Healthy: {{query-health.healthy}}'
  consumes:
  - type: http
    namespace: sf-smb
    baseUri: https://meta.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: accounts
      path: /query
      inputParameters:
      - name: segment
        in: query
      operations:
      - name: query-accounts
        method: GET
  - type: http
    namespace: slack-smb
    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 → salesforce-smb-advertiser-health-digest.yml

Compiles sprint metrics from Jira and posts a retrospective to Slack.

naftiko: '0.5'
info:
  label: Jira Sprint Retro Summary
  description: Compiles sprint metrics from Jira and posts a retrospective to Slack.
  tags:
  - engineering
  - jira
  - slack
  - agile
capability:
  exposes:
  - type: mcp
    namespace: agile-ops
    port: 8080
    tools:
    - name: handle-sprint-retro
      description: Given a sprint ID, compile metrics and post retro to Slack.
      inputParameters:
      - name: sprint_id
        in: body
        type: integer
        description: Jira sprint ID.
      steps:
      - name: get-sprint
        type: call
        call: jira-agile.get-sprint
        with:
          sprint_id: '{{sprint_id}}'
      - name: get-issues
        type: call
        call: jira-agile.get-sprint-issues
        with:
          sprint_id: '{{sprint_id}}'
      - name: post-retro
        type: call
        call: slack-eng.post-message
        with:
          channel: engineering
          text: 'Sprint Retro: {{get-sprint.name}} | Completed: {{get-issues.total}} | Goal: {{get-sprint.goal}}'
  consumes:
  - type: http
    namespace: jira-agile
    baseUri: https://meta.atlassian.net/rest/agile/1.0
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: sprints
      path: /sprint/{{sprint_id}}
      inputParameters:
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint
        method: GET
    - name: sprint-issues
      path: /sprint/{{sprint_id}}/issue
      inputParameters:
      - name: sprint_id
        in: path
      operations:
      - name: get-sprint-issues
        method: GET
  - type: http
    namespace: slack-eng
    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 → jira-sprint-retro-summary.yml

Fetches performance metrics for a Meta Ads campaign from the Meta Graph API and posts a formatted summary to the marketing Slack channel.

naftiko: '0.5'
info:
  label: Meta Ads Campaign Performance Digest
  description: Fetches performance metrics for a Meta Ads campaign from the Meta Graph API and posts a formatted summary to the marketing Slack channel.
  tags:
  - marketing
  - meta-ads
  - ads
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: ads-reporting
    port: 8080
    tools:
    - name: digest-campaign-performance
      description: Given a Meta Ads campaign ID and date range, retrieve impressions, clicks, spend, and ROAS from the Meta Graph API and post a formatted performance digest to the marketing Slack channel.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Meta Ads campaign ID to report on.
      - name: date_start
        in: body
        type: string
        description: Start date for the reporting period (YYYY-MM-DD).
      - name: date_stop
        in: body
        type: string
        description: End date for the reporting period (YYYY-MM-DD).
      - name: slack_channel
        in: body
        type: string
        description: Slack channel ID to post the digest to.
      steps:
      - name: get-insights
        type: call
        call: meta-graph.get-campaign-insights
        with:
          campaign_id: '{{campaign_id}}'
          date_start: '{{date_start}}'
          date_stop: '{{date_stop}}'
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Campaign Report ({{date_start}} to {{date_stop}}): Impressions: {{get-insights.impressions}} | Clicks: {{get-insights.clicks}} | Spend: ${{get-insights.spend}} | ROAS: {{get-insights.roas}}'
  consumes:
  - type: http
    namespace: meta-graph
    baseUri: https://graph.facebook.com/v18.0
    authentication:
      type: bearer
      token: $secrets.meta_graph_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: 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 → meta-ads-campaign-performance-digest.yml

When a Datadog infrastructure monitor fires for a production service, creates a ServiceNow incident and pages the on-call engineer via PagerDuty.

naftiko: '0.5'
info:
  label: Datadog Infrastructure Alert to PagerDuty
  description: When a Datadog infrastructure monitor fires for a production service, creates a ServiceNow incident and pages the on-call engineer via PagerDuty.
  tags:
  - observability
  - infrastructure
  - datadog
  - servicenow
  - pagerduty
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: infra-monitoring
    port: 8080
    tools:
    - name: handle-infrastructure-alert
      description: Given a Datadog infrastructure alert with service, host, and metric details, open a high-priority ServiceNow incident and trigger a PagerDuty escalation to the on-call engineer.
      inputParameters:
      - name: monitor_name
        in: body
        type: string
        description: The Datadog monitor name that fired.
      - name: service_name
        in: body
        type: string
        description: The affected production service name.
      - name: host
        in: body
        type: string
        description: The affected host identifier.
      - name: alert_url
        in: body
        type: string
        description: URL to the Datadog monitor alert.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Infrastructure alert: {{monitor_name}} on {{host}}'
          urgency: '1'
          category: infrastructure
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Infra Alert: {{monitor_name}} on {{service_name}}'
          severity: critical
          body: 'Host: {{host}}. Alert: {{alert_url}}. SNOW: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://meta.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incident
      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-to-pagerduty.yml

Queries Snowflake for Meta app marketplace analytics and posts to the platform Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Marketplace App Analytics
  description: Queries Snowflake for Meta app marketplace analytics and posts to the platform Slack channel.
  tags:
  - platform
  - snowflake
  - slack
  - marketplace
capability:
  exposes:
  - type: mcp
    namespace: marketplace-analytics
    port: 8080
    tools:
    - name: handle-marketplace-report
      description: Given a period, query marketplace analytics and post to Slack.
      inputParameters:
      - name: period
        in: body
        type: string
        description: Reporting period.
      steps:
      - name: query-apps
        type: call
        call: snowflake-market.run-query
        with:
          period: '{{period}}'
      - name: post-report
        type: call
        call: slack-market.post-message
        with:
          channel: platform-analytics
          text: 'Marketplace ({{period}}): New apps: {{query-apps.new_apps}} | DAU: {{query-apps.total_dau}} | Revenue: ${{query-apps.total_revenue}}'
  consumes:
  - type: http
    namespace: snowflake-market
    baseUri: https://meta.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: slack-market
    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 → snowflake-marketplace-app-analytics.yml

Generates weekly SLO compliance for the Facebook Graph API from Datadog and posts to Slack.

naftiko: '0.5'
info:
  label: Datadog Graph API SLO Weekly Report
  description: Generates weekly SLO compliance for the Facebook Graph API from Datadog and posts to Slack.
  tags:
  - platform
  - datadog
  - slack
  - slo
capability:
  exposes:
  - type: mcp
    namespace: graph-api-ops
    port: 8080
    tools:
    - name: handle-graph-api-slo
      description: Given a Datadog SLO ID, generate weekly report and post to Slack.
      inputParameters:
      - name: slo_id
        in: body
        type: string
        description: Datadog SLO ID.
      steps:
      - name: get-slo
        type: call
        call: dd-graph.get-slo-history
        with:
          slo_id: '{{slo_id}}'
      - name: post-report
        type: call
        call: slack-graph.post-message
        with:
          channel: graph-api
          text: 'Graph API SLO: Target: {{get-slo.target}}% | Actual: {{get-slo.overall_status}} | Budget: {{get-slo.error_budget_remaining}}%'
  consumes:
  - type: http
    namespace: dd-graph
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: slo
      path: /slo/{{slo_id}}/history
      inputParameters:
      - name: slo_id
        in: path
      operations:
      - name: get-slo-history
        method: GET
  - type: http
    namespace: slack-graph
    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 → datadog-graph-api-slo-weekly-report.yml

Identifies GitHub pull requests that have been open without review for more than 48 hours and posts reminders to the team's Slack channel.

naftiko: '0.5'
info:
  label: GitHub Pull Request Review Reminder
  description: Identifies GitHub pull requests that have been open without review for more than 48 hours and posts reminders to the team's Slack channel.
  tags:
  - devops
  - github
  - slack
  - code-review
  - engineering
capability:
  exposes:
  - type: mcp
    namespace: code-review-ops
    port: 8080
    tools:
    - name: remind-stale-pull-requests
      description: Given a GitHub organization and repository, find pull requests open for more than a specified number of hours without a review, and post reminder messages to the team Slack channel.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: The GitHub repository to check (e.g., facebook/react).
      - name: stale_hours
        in: body
        type: integer
        description: Number of hours a PR must be open without review to be considered stale.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel ID to post reminders to.
      steps:
      - name: get-pull-requests
        type: call
        call: github.list-pull-requests
        with:
          repository: '{{repository}}'
          state: open
      - name: post-reminder
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'PR Review Reminder: {{get-pull-requests.stale_count}} pull requests in {{repository}} have been open for >{{stale_hours}} hours without review. Please review: {{get-pull-requests.stale_pr_links}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{repository}}/pulls
      inputParameters:
      - name: repository
        in: path
      operations:
      - name: list-pull-requests
        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-pull-request-review-reminder.yml

Before a release proceeds in Azure DevOps, validates SonarQube quality gate status, checks Azure Monitor for active critical alerts, and posts gate results to Teams.

naftiko: '0.5'
info:
  label: Azure DevOps Release Gate Checker
  description: Before a release proceeds in Azure DevOps, validates SonarQube quality gate status, checks Azure Monitor for active critical alerts, and posts gate results to Teams.
  tags:
  - devops
  - ci-cd
  - azure-devops
  - code-quality
  - monitoring
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: release-gates
    port: 8080
    tools:
    - name: validate-release-gates
      description: Check SonarQube quality gate and Azure Monitor alerts before allowing an Azure DevOps release.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: SonarQube project key.
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID for monitoring checks.
      steps:
      - name: check-sonar
        type: call
        call: sonarqube-api.get-quality-gate
        with:
          project_key: '{{project_key}}'
      - name: check-alerts
        type: call
        call: azure-monitor-alerts.list-active
        with:
          subscription_id: '{{subscription_id}}'
      - name: post-results
        type: call
        call: msteams-releases.post-channel-message
        with:
          channel_id: Releases
          text: 'Release gate results — SonarQube: {{check-sonar.status}}, Active critical alerts: {{check-alerts.critical_count}}.'
  consumes:
  - type: http
    namespace: sonarqube-api
    baseUri: https://sonarqube.microsoft.com/api
    authentication:
      type: bearer
      token: $secrets.sonarqube_token
    resources:
    - name: quality-gates
      path: /qualitygates/project_status
      operations:
      - name: get-quality-gate
        method: GET
  - type: http
    namespace: azure-monitor-alerts
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: alerts
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.AlertsManagement/alerts
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: list-active
        method: GET
  - type: http
    namespace: msteams-releases
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-devops-release-gate-checker.yml

Monitors Azure Synapse Analytics for long-running queries, fetches query details, alerts the data team on Teams, and logs the event to Azure Log Analytics.

naftiko: '0.5'
info:
  label: Azure Synapse Query Performance Alert
  description: Monitors Azure Synapse Analytics for long-running queries, fetches query details, alerts the data team on Teams, and logs the event to Azure Log Analytics.
  tags:
  - data
  - analytics
  - azure-synapse-analytics
  - monitoring
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: synapse-perf
    port: 8080
    tools:
    - name: handle-slow-query
      description: Detect and respond to long-running Synapse queries by alerting the data team and logging to Log Analytics.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: Synapse workspace name.
      - name: threshold_minutes
        in: body
        type: number
        description: Query duration threshold in minutes.
      steps:
      - name: get-slow-queries
        type: call
        call: synapse-api.list-sql-queries
        with:
          workspace_name: '{{workspace_name}}'
      - name: alert-team
        type: call
        call: msteams-dataops.post-channel-message
        with:
          channel_id: DataOps
          text: 'Slow query alert in Synapse workspace {{workspace_name}}: {{get-slow-queries.count}} queries exceeding {{threshold_minutes}} min threshold.'
      - name: log-event
        type: call
        call: log-analytics-synapse.post-log
        with:
          log_type: SynapseSlowQuery
          body: 'Workspace: {{workspace_name}}, Count: {{get-slow-queries.count}}'
  consumes:
  - type: http
    namespace: synapse-api
    baseUri: https://{{workspace_name}}.sql.azuresynapse.net
    authentication:
      type: bearer
      token: $secrets.synapse_token
    resources:
    - name: sql-queries
      path: /monitoring/sql/queries
      operations:
      - name: list-sql-queries
        method: GET
  - type: http
    namespace: msteams-dataops
    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: post-channel-message
        method: POST
  - type: http
    namespace: log-analytics-synapse
    baseUri: https://$secrets.log_analytics_workspace_id.ods.opinsights.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: custom-logs
      path: /api/logs
      operations:
      - name: post-log
        method: POST
Open in Framework → View in Fleet → azure-synapse-query-performance-alert.yml

When a new lead is created in Dynamics 365, enriches it with LinkedIn data, scores the lead, and creates a follow-up task for the sales rep in Dynamics 365.

naftiko: '0.5'
info:
  label: Dynamics 365 Lead Qualification Workflow
  description: When a new lead is created in Dynamics 365, enriches it with LinkedIn data, scores the lead, and creates a follow-up task for the sales rep in Dynamics 365.
  tags:
  - crm
  - sales
  - dynamics-365
  - linkedin
  - automation
capability:
  exposes:
  - type: mcp
    namespace: lead-qualification
    port: 8080
    tools:
    - name: qualify-lead
      description: Enrich a Dynamics 365 lead with LinkedIn data, score it, and create a follow-up task.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: Dynamics 365 lead ID.
      - name: company_name
        in: body
        type: string
        description: Company name for LinkedIn lookup.
      steps:
      - name: get-lead
        type: call
        call: d365-leads.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: enrich-linkedin
        type: call
        call: linkedin-enrich.company-lookup
        with:
          company_name: '{{company_name}}'
      - name: create-followup
        type: call
        call: d365-tasks.create-task
        with:
          subject: Follow up with {{get-lead.fullname}} at {{company_name}}
          regarding_id: '{{lead_id}}'
          description: 'Company size: {{enrich-linkedin.employee_count}}. Industry: {{enrich-linkedin.industry}}'
  consumes:
  - type: http
    namespace: d365-leads
    baseUri: https://$secrets.d365_org.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.d365_token
    resources:
    - name: leads
      path: /leads({{lead_id}})
      inputParameters:
      - name: lead_id
        in: path
      operations:
      - name: get-lead
        method: GET
  - type: http
    namespace: linkedin-enrich
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: companies
      path: /organizationAcls
      operations:
      - name: company-lookup
        method: GET
  - type: http
    namespace: d365-tasks
    baseUri: https://$secrets.d365_org.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.d365_token
    resources:
    - name: tasks
      path: /tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → dynamics-365-lead-qualification-workflow.yml

When a pull request is opened, analyzes the changed files to determine appropriate labels, applies them, and posts a summary to the repository's Teams channel.

naftiko: '0.5'
info:
  label: GitHub Pull Request Auto Labeler
  description: When a pull request is opened, analyzes the changed files to determine appropriate labels, applies them, and posts a summary to the repository's Teams channel.
  tags:
  - devops
  - github
  - automation
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: pr-labeler
    port: 8080
    tools:
    - name: auto-label-pr
      description: Analyze PR changed files, apply labels, and notify the team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: pr_number
        in: body
        type: integer
        description: Pull request number.
      steps:
      - name: get-files
        type: call
        call: github-pr-files.list-files
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
      - name: add-labels
        type: call
        call: github-pr-labels.add-labels
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
      - name: notify-team
        type: call
        call: msteams-repo.post-channel-message
        with:
          channel_id: Engineering
          text: 'PR #{{pr_number}} in {{repo}} auto-labeled: {{get-files.detected_labels}}. Files changed: {{get-files.file_count}}.'
  consumes:
  - type: http
    namespace: github-pr-files
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pr-files
      path: /repos/{{repo}}/pulls/{{pr_number}}/files
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: list-files
        method: GET
  - type: http
    namespace: github-pr-labels
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: labels
      path: /repos/{{repo}}/issues/{{pr_number}}/labels
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: add-labels
        method: POST
  - type: http
    namespace: msteams-repo
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-pull-request-auto-labeler.yml

Reads items from a SharePoint Online list via the Microsoft Graph API for reporting or downstream processing.

naftiko: '0.5'
info:
  label: SharePoint List Items Reader
  description: Reads items from a SharePoint Online list via the Microsoft Graph API for reporting or downstream processing.
  tags:
  - data
  - sharepoint
  - microsoft-graph
  - collaboration
capability:
  exposes:
  - type: mcp
    namespace: sharepoint-lists
    port: 8080
    tools:
    - name: get-list-items
      description: Retrieve all items from a SharePoint list given the site ID and list ID.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: list_id
        in: body
        type: string
        description: SharePoint list ID.
  consumes:
  - type: http
    namespace: graph-sharepoint
    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: list-items
        method: GET
Open in Framework → View in Fleet → sharepoint-list-items-reader.yml

Executes a Kusto query against an Azure Log Analytics workspace and returns the result set.

naftiko: '0.5'
info:
  label: Azure Log Analytics Query
  description: Executes a Kusto query against an Azure Log Analytics workspace and returns the result set.
  tags:
  - monitoring
  - observability
  - azure
  - log-analytics
capability:
  exposes:
  - type: mcp
    namespace: log-query
    port: 8080
    tools:
    - name: run-query
      description: Execute a KQL query against a Log Analytics workspace.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Log Analytics workspace ID.
      - name: query
        in: body
        type: string
        description: KQL query string.
  consumes:
  - type: http
    namespace: log-analytics
    baseUri: https://api.loganalytics.io/v1
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: query
      path: /workspaces/{{workspace_id}}/query
      inputParameters:
      - name: workspace_id
        in: path
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → azure-log-analytics-query.yml

Triggers a vulnerability scan on an Azure Container Registry image, fetches the scan results, and posts critical findings to the security and DevOps Teams channels.

naftiko: '0.5'
info:
  label: Azure Container Registry Vulnerability Scanner
  description: Triggers a vulnerability scan on an Azure Container Registry image, fetches the scan results, and posts critical findings to the security and DevOps Teams channels.
  tags:
  - security
  - containers
  - azure
  - devops
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: acr-scan
    port: 8080
    tools:
    - name: scan-container-image
      description: Trigger and report on a container image vulnerability scan in Azure Container Registry.
      inputParameters:
      - name: registry_name
        in: body
        type: string
        description: ACR registry name.
      - name: repository
        in: body
        type: string
        description: Container repository name.
      - name: tag
        in: body
        type: string
        description: Image tag to scan.
      steps:
      - name: get-scan-results
        type: call
        call: acr-api.get-manifest
        with:
          registry_name: '{{registry_name}}'
          repository: '{{repository}}'
          tag: '{{tag}}'
      - name: alert-security
        type: call
        call: msteams-container-sec.post-channel-message
        with:
          channel_id: SecurityOps
          text: 'ACR vulnerability scan for {{registry_name}}/{{repository}}:{{tag}}: {{get-scan-results.critical_count}} critical, {{get-scan-results.high_count}} high vulnerabilities.'
      - name: alert-devops
        type: call
        call: msteams-container-devops.post-channel-message
        with:
          channel_id: DevOps
          text: 'Container image {{repository}}:{{tag}} scan complete. Action required: {{get-scan-results.critical_count}} critical findings.'
  consumes:
  - type: http
    namespace: acr-api
    baseUri: https://{{registry_name}}.azurecr.io
    authentication:
      type: bearer
      token: $secrets.acr_token
    resources:
    - name: manifests
      path: /v2/{{repository}}/manifests/{{tag}}
      inputParameters:
      - name: repository
        in: path
      - name: tag
        in: path
      operations:
      - name: get-manifest
        method: GET
  - type: http
    namespace: msteams-container-sec
    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: post-channel-message
        method: POST
  - type: http
    namespace: msteams-container-devops
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-container-registry-vulnerability-scanner.yml

Monitors Cosmos DB RU consumption, scales throughput when utilization exceeds threshold, and notifies the data team on Teams with the new provisioned RUs.

naftiko: '0.5'
info:
  label: Azure Cosmos DB Throughput Scaler
  description: Monitors Cosmos DB RU consumption, scales throughput when utilization exceeds threshold, and notifies the data team on Teams with the new provisioned RUs.
  tags:
  - data
  - database
  - azure
  - cosmos-db
  - microsoft-teams
  - autoscaling
capability:
  exposes:
  - type: mcp
    namespace: cosmos-scaler
    port: 8080
    tools:
    - name: scale-throughput
      description: Check Cosmos DB RU utilization and scale throughput if above threshold, then notify the data team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: account_name
        in: body
        type: string
        description: Cosmos DB account name.
      - name: database_name
        in: body
        type: string
        description: Database name.
      steps:
      - name: get-metrics
        type: call
        call: cosmos-api.get-metrics
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          account_name: '{{account_name}}'
      - name: update-throughput
        type: call
        call: cosmos-api.update-throughput
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          account_name: '{{account_name}}'
          database_name: '{{database_name}}'
      - name: notify-team
        type: call
        call: msteams-data-cosmos.post-channel-message
        with:
          channel_id: DataEngineering
          text: 'Cosmos DB {{account_name}}/{{database_name}} throughput scaled. Current RU utilization: {{get-metrics.ru_percentage}}%.'
  consumes:
  - type: http
    namespace: cosmos-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: metrics
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.DocumentDB/databaseAccounts/{{account_name}}/providers/Microsoft.Insights/metrics
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: account_name
        in: path
      operations:
      - name: get-metrics
        method: GET
    - name: throughput
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.DocumentDB/databaseAccounts/{{account_name}}/sqlDatabases/{{database_name}}/throughputSettings/default
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: account_name
        in: path
      - name: database_name
        in: path
      operations:
      - name: update-throughput
        method: PUT
  - type: http
    namespace: msteams-data-cosmos
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-cosmos-db-throughput-scaler.yml

Fetches recruiter pipeline metrics from LinkedIn Talent Solutions, syncs them to a Dynamics 365 HR module, and posts a weekly summary to the talent acquisition Teams channel.

naftiko: '0.5'
info:
  label: LinkedIn Recruiter Pipeline Tracker
  description: Fetches recruiter pipeline metrics from LinkedIn Talent Solutions, syncs them to a Dynamics 365 HR module, and posts a weekly summary to the talent acquisition Teams channel.
  tags:
  - recruiting
  - linkedin
  - dynamics-365
  - microsoft-teams
  - hr
capability:
  exposes:
  - type: mcp
    namespace: recruiter-pipeline
    port: 8080
    tools:
    - name: sync-pipeline-metrics
      description: Fetch LinkedIn recruiter pipeline data, sync to Dynamics 365, and post a summary to Teams.
      inputParameters:
      - name: org_id
        in: body
        type: string
        description: LinkedIn organization ID.
      steps:
      - name: get-pipeline
        type: call
        call: linkedin-talent.get-pipeline
        with:
          org_id: '{{org_id}}'
      - name: sync-to-d365
        type: call
        call: d365-hr.create-record
        with:
          entity: recruiting_pipeline_metrics
      - name: post-summary
        type: call
        call: msteams-talent.post-channel-message
        with:
          channel_id: TalentAcquisition
          text: 'LinkedIn recruiter pipeline update: {{get-pipeline.open_positions}} open, {{get-pipeline.candidates_in_review}} in review, {{get-pipeline.offers_extended}} offers extended.'
  consumes:
  - type: http
    namespace: linkedin-talent
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: pipeline
      path: /talentPipeline
      operations:
      - name: get-pipeline
        method: GET
  - type: http
    namespace: d365-hr
    baseUri: https://$secrets.d365_org.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.d365_token
    resources:
    - name: records
      path: /{{entity}}
      inputParameters:
      - name: entity
        in: path
      operations:
      - name: create-record
        method: POST
  - type: http
    namespace: msteams-talent
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-recruiter-pipeline-tracker.yml

Checks Azure App Service SSL certificates approaching expiration, triggers renewal via Key Vault, and notifies the web team on Teams and via email.

naftiko: '0.5'
info:
  label: Azure App Service Certificate Renewal
  description: Checks Azure App Service SSL certificates approaching expiration, triggers renewal via Key Vault, and notifies the web team on Teams and via email.
  tags:
  - security
  - azure
  - certificates
  - key-vault
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: cert-renewal
    port: 8080
    tools:
    - name: check-and-renew-certs
      description: Check App Service certificates nearing expiry, renew via Key Vault, and notify the web team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: vault_name
        in: body
        type: string
        description: Key Vault name holding the certificates.
      steps:
      - name: list-certificates
        type: call
        call: appservice-certs.list-certificates
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
      - name: trigger-renewal
        type: call
        call: keyvault-certs.create-certificate
        with:
          vault_name: '{{vault_name}}'
      - name: notify-web-team
        type: call
        call: msteams-web.post-channel-message
        with:
          channel_id: WebOps
          text: 'Certificate renewal triggered for {{list-certificates.expiring_count}} certificates in {{resource_group}}. Key Vault: {{vault_name}}.'
      - name: email-ops
        type: call
        call: graph-mail-certs.send-mail
        with:
          sender_id: cert-admin@microsoft.com
          subject: SSL Certificate Renewal — {{resource_group}}
          body: '{{list-certificates.expiring_count}} certificates renewed via Key Vault {{vault_name}}.'
  consumes:
  - type: http
    namespace: appservice-certs
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: certificates
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Web/certificates
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      operations:
      - name: list-certificates
        method: GET
  - type: http
    namespace: keyvault-certs
    baseUri: https://{{vault_name}}.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_keyvault_token
    resources:
    - name: certificates
      path: /certificates
      operations:
      - name: create-certificate
        method: POST
  - type: http
    namespace: msteams-web
    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: post-channel-message
        method: POST
  - type: http
    namespace: graph-mail-certs
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → azure-app-service-certificate-renewal.yml

Takes a user question, searches Azure AI Search for relevant documents, passes the results to Azure OpenAI for RAG-based answer generation, and returns the answer with source citations.

naftiko: '0.5'
info:
  label: Copilot Document QA Agent
  description: Takes a user question, searches Azure AI Search for relevant documents, passes the results to Azure OpenAI for RAG-based answer generation, and returns the answer with source citations.
  tags:
  - ai
  - generative-ai
  - azure
  - search
  - copilot
  - rag
capability:
  exposes:
  - type: mcp
    namespace: doc-qa
    port: 8080
    tools:
    - name: answer-question
      description: Answer a question using RAG by searching Azure AI Search and generating a response with Azure OpenAI.
      inputParameters:
      - name: question
        in: body
        type: string
        description: User question to answer.
      - name: index_name
        in: body
        type: string
        description: Azure AI Search index name.
      - name: service_name
        in: body
        type: string
        description: Azure AI Search service name.
      steps:
      - name: search-docs
        type: call
        call: azure-search-rag.query-index
        with:
          service_name: '{{service_name}}'
          index_name: '{{index_name}}'
          query: '{{question}}'
      - name: generate-answer
        type: call
        call: azure-openai-rag.create-completion
        with:
          deployment_id: gpt-4o
          prompt: 'Answer the following question based on these documents:


            Documents: {{search-docs.results}}


            Question: {{question}}'
  consumes:
  - type: http
    namespace: azure-search-rag
    baseUri: https://{{service_name}}.search.windows.net
    authentication:
      type: apiKey
      name: api-key
      value: $secrets.azure_search_key
    resources:
    - name: search
      path: /indexes/{{index_name}}/docs/search
      inputParameters:
      - name: index_name
        in: path
      operations:
      - name: query-index
        method: POST
  - type: http
    namespace: azure-openai-rag
    baseUri: https://$secrets.azure_openai_endpoint.openai.azure.com/openai/deployments/{{deployment_id}}
    authentication:
      type: apiKey
      name: api-key
      value: $secrets.azure_openai_key
    resources:
    - name: completions
      path: /chat/completions
      inputParameters:
      - name: deployment_id
        in: path
      operations:
      - name: create-completion
        method: POST
Open in Framework → View in Fleet → copilot-document-qa-agent.yml

Monitors Azure Virtual Desktop session host health, identifies disconnected sessions exceeding a threshold, alerts the VDI team on Teams, and logs findings to Log Analytics.

naftiko: '0.5'
info:
  label: Azure Virtual Desktop Session Monitor
  description: Monitors Azure Virtual Desktop session host health, identifies disconnected sessions exceeding a threshold, alerts the VDI team on Teams, and logs findings to Log Analytics.
  tags:
  - endpoint-management
  - azure-virtual-desktop
  - monitoring
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: avd-monitor
    port: 8080
    tools:
    - name: check-sessions
      description: Monitor AVD session host health, alert on disconnected sessions, and log to Log Analytics.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: host_pool_name
        in: body
        type: string
        description: AVD host pool name.
      steps:
      - name: get-sessions
        type: call
        call: avd-api.list-sessions
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          host_pool_name: '{{host_pool_name}}'
      - name: alert-vdi
        type: call
        call: msteams-vdi.post-channel-message
        with:
          channel_id: VDI
          text: 'AVD session monitor for {{host_pool_name}}: {{get-sessions.active_count}} active, {{get-sessions.disconnected_count}} disconnected sessions.'
      - name: log-to-analytics
        type: call
        call: log-analytics-avd.post-log
        with:
          log_type: AVDSessionHealth
          body: 'HostPool: {{host_pool_name}}, Active: {{get-sessions.active_count}}, Disconnected: {{get-sessions.disconnected_count}}'
  consumes:
  - type: http
    namespace: avd-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: sessions
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.DesktopVirtualization/hostPools/{{host_pool_name}}/userSessions
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: host_pool_name
        in: path
      operations:
      - name: list-sessions
        method: GET
  - type: http
    namespace: msteams-vdi
    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: post-channel-message
        method: POST
  - type: http
    namespace: log-analytics-avd
    baseUri: https://$secrets.log_analytics_workspace_id.ods.opinsights.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: custom-logs
      path: /api/logs
      operations:
      - name: post-log
        method: POST
Open in Framework → View in Fleet → azure-virtual-desktop-session-monitor.yml

Scans a user's OneDrive for files exceeding a size threshold, generates a report, and emails the user with cleanup recommendations.

naftiko: '0.5'
info:
  label: OneDrive Large File Scanner
  description: Scans a user's OneDrive for files exceeding a size threshold, generates a report, and emails the user with cleanup recommendations.
  tags:
  - storage
  - microsoft-graph
  - onedrive
  - microsoft-outlook
  - governance
capability:
  exposes:
  - type: mcp
    namespace: onedrive-scanner
    port: 8080
    tools:
    - name: scan-large-files
      description: Scan OneDrive for files exceeding a size threshold and email the user with findings.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: User principal name or ID.
      - name: threshold_mb
        in: body
        type: number
        description: File size threshold in megabytes.
      steps:
      - name: list-files
        type: call
        call: graph-onedrive.list-children
        with:
          user_id: '{{user_id}}'
      - name: email-report
        type: call
        call: graph-mail-storage.send-mail
        with:
          sender_id: storage-admin@microsoft.com
          subject: OneDrive Storage Report — Large Files Detected
          body: 'We found {{list-files.large_file_count}} files exceeding {{threshold_mb}}MB in your OneDrive. Total size: {{list-files.total_large_mb}}MB. Please review and clean up.'
  consumes:
  - type: http
    namespace: graph-onedrive
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-children
      path: /users/{{user_id}}/drive/root/children
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: list-children
        method: GET
  - type: http
    namespace: graph-mail-storage
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → onedrive-large-file-scanner.yml

When Azure Cost Management detects a spend anomaly above threshold, fetches cost breakdown by resource group, posts an alert to Microsoft Teams, and opens a ServiceNow change request for investigation.

naftiko: '0.5'
info:
  label: Azure Cost Anomaly Responder
  description: When Azure Cost Management detects a spend anomaly above threshold, fetches cost breakdown by resource group, posts an alert to Microsoft Teams, and opens a ServiceNow change request for investigation.
  tags:
  - cloud
  - finops
  - azure
  - cost-management
  - microsoft-teams
  - servicenow
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an Azure subscription ID and anomaly alert ID, fetch the cost breakdown, post an alert to Teams, and open a ServiceNow change request for cost investigation.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID where the anomaly was detected.
      - name: anomaly_id
        in: body
        type: string
        description: The Azure Cost Management anomaly alert identifier.
      - name: threshold_usd
        in: body
        type: number
        description: Spend threshold in USD that triggered the alert.
      steps:
      - name: get-cost-breakdown
        type: call
        call: azure-cost.get-anomaly
        with:
          subscription_id: '{{subscription_id}}'
          anomaly_id: '{{anomaly_id}}'
      - name: alert-teams
        type: call
        call: msteams-finops.post-channel-message
        with:
          channel_id: CloudOps
          text: 'Cost anomaly detected in subscription {{subscription_id}}. Estimated overage: ${{threshold_usd}}. Resource group: {{get-cost-breakdown.top_resource_group}}'
      - name: open-change
        type: call
        call: servicenow-finops.create-change
        with:
          short_description: 'Azure cost anomaly investigation: subscription {{subscription_id}}'
          category: cloud_cost
          description: 'Anomaly ID: {{anomaly_id}}

            Top resource group: {{get-cost-breakdown.top_resource_group}}

            Estimated overage: ${{threshold_usd}}'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: anomalies
      path: /{{subscription_id}}/providers/Microsoft.CostManagement/anomalies/{{anomaly_id}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: anomaly_id
        in: path
      operations:
      - name: get-anomaly
        method: GET
  - 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/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
  - type: http
    namespace: servicenow-finops
    baseUri: https://microsoft.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
Open in Framework → View in Fleet → azure-cost-anomaly-responder.yml

Retrieves achievement data for an Xbox Live user via the Xbox Services API for player analytics.

naftiko: '0.5'
info:
  label: Xbox Live Achievement Reader
  description: Retrieves achievement data for an Xbox Live user via the Xbox Services API for player analytics.
  tags:
  - gaming
  - xbox
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: xbox-achievements
    port: 8080
    tools:
    - name: get-achievements
      description: Retrieve Xbox Live achievements for a specified user.
      inputParameters:
      - name: xuid
        in: body
        type: string
        description: Xbox User ID (XUID).
  consumes:
  - type: http
    namespace: xbox-api
    baseUri: https://xbl.io/api/v2
    authentication:
      type: apiKey
      name: X-Authorization
      value: $secrets.xbox_api_key
    resources:
    - name: achievements
      path: /achievements/player/{{xuid}}
      inputParameters:
      - name: xuid
        in: path
      operations:
      - name: list-achievements
        method: GET
Open in Framework → View in Fleet → xbox-live-achievement-reader.yml

Toggles a feature flag in Azure App Configuration, invalidates related caches, and notifies the engineering team on Teams about the feature state change.

naftiko: '0.5'
info:
  label: Azure App Configuration Feature Flag Toggler
  description: Toggles a feature flag in Azure App Configuration, invalidates related caches, and notifies the engineering team on Teams about the feature state change.
  tags:
  - devops
  - azure
  - feature-flags
  - microsoft-teams
  - configuration
capability:
  exposes:
  - type: mcp
    namespace: feature-flags
    port: 8080
    tools:
    - name: toggle-feature
      description: Toggle a feature flag in Azure App Configuration and notify the engineering team.
      inputParameters:
      - name: config_store
        in: body
        type: string
        description: App Configuration store name.
      - name: feature_name
        in: body
        type: string
        description: Feature flag name.
      - name: enabled
        in: body
        type: boolean
        description: Target feature state.
      steps:
      - name: update-flag
        type: call
        call: appconfig-api.set-key-value
        with:
          config_store: '{{config_store}}'
          key: .appconfig.featureflag/{{feature_name}}
      - name: notify-eng
        type: call
        call: msteams-eng-flags.post-channel-message
        with:
          channel_id: Engineering
          text: Feature flag {{feature_name}} set to {{enabled}} in {{config_store}}. Change by automation. Verify in staging.
  consumes:
  - type: http
    namespace: appconfig-api
    baseUri: https://{{config_store}}.azconfig.io
    authentication:
      type: bearer
      token: $secrets.appconfig_token
    resources:
    - name: key-values
      path: /kv/{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: set-key-value
        method: PUT
  - type: http
    namespace: msteams-eng-flags
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-app-configuration-feature-flag-toggler.yml

Posts a message to a specified Microsoft Teams channel using the Microsoft Graph API.

naftiko: '0.5'
info:
  label: Teams Channel Message Sender
  description: Posts a message to a specified Microsoft Teams channel using the Microsoft Graph API.
  tags:
  - collaboration
  - microsoft-teams
  - messaging
capability:
  exposes:
  - type: mcp
    namespace: teams-messaging
    port: 8080
    tools:
    - name: send-channel-message
      description: Post a text message to a Microsoft Teams channel.
      inputParameters:
      - name: team_id
        in: body
        type: string
        description: Microsoft Teams team ID.
      - name: channel_id
        in: body
        type: string
        description: Channel ID within the team.
      - name: message
        in: body
        type: string
        description: Message content to post.
  consumes:
  - type: http
    namespace: msteams-msg
    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 → teams-channel-message-sender.yml

Identifies stale Azure AD guest user accounts inactive for over 90 days, generates a removal candidate list in SharePoint, and sends a weekly cleanup report to the IT Governance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Azure Active Directory Guest Access Cleanup
  description: Identifies stale Azure AD guest user accounts inactive for over 90 days, generates a removal candidate list in SharePoint, and sends a weekly cleanup report to the IT Governance Microsoft Teams channel.
  tags:
  - security
  - identity
  - azure-ad
  - sharepoint
  - microsoft-teams
  - guest-access
  - governance
capability:
  exposes:
  - type: mcp
    namespace: guest-cleanup
    port: 8080
    tools:
    - name: identify-stale-guest-accounts
      description: Query Microsoft Graph for guest users with no sign-in activity in the specified number of days, export the list to SharePoint, and post a cleanup report to the IT Governance Teams channel.
      inputParameters:
      - name: inactive_days
        in: body
        type: integer
        description: Number of days without sign-in that qualifies a guest account as stale. Default is 90.
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID where the stale guest report will be stored.
      steps:
      - name: list-stale-guests
        type: call
        call: msgraph-guests.list-guest-users
        with:
          inactive_days: '{{inactive_days}}'
          user_type: Guest
      - name: export-report
        type: call
        call: sharepoint-governance.create-file
        with:
          site_id: '{{sharepoint_site_id}}'
          file_name: StaleGuestAccounts_{{list-stale-guests.report_date}}.csv
          content: '{{list-stale-guests.csv_data}}'
      - name: notify-it-gov
        type: call
        call: msteams-it-gov.post-channel-message
        with:
          channel_id: ITGovernance
          text: 'Guest access review: {{list-stale-guests.stale_count}} stale guest accounts identified (inactive {{inactive_days}}+ days). Report: {{export-report.file_url}}'
  consumes:
  - type: http
    namespace: msgraph-guests
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: guest-users
      path: /users
      inputParameters:
      - name: inactive_days
        in: query
      - name: user_type
        in: query
      operations:
      - name: list-guest-users
        method: GET
  - type: http
    namespace: sharepoint-governance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-file
        method: POST
  - type: http
    namespace: msteams-it-gov
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-active-directory-guest-access-cleanup.yml

Provisions a new Power Platform environment with specified DLP policies, configures security roles, and notifies the platform admin team on Teams.

naftiko: '0.5'
info:
  label: Power Platform Environment Provisioner
  description: Provisions a new Power Platform environment with specified DLP policies, configures security roles, and notifies the platform admin team on Teams.
  tags:
  - platform
  - power-platform
  - governance
  - microsoft-teams
  - administration
capability:
  exposes:
  - type: mcp
    namespace: pp-provisioner
    port: 8080
    tools:
    - name: provision-environment
      description: Create a new Power Platform environment, apply DLP policies, and notify admins.
      inputParameters:
      - name: display_name
        in: body
        type: string
        description: Display name for the new environment.
      - name: environment_type
        in: body
        type: string
        description: 'Environment type: Sandbox or Production.'
      - name: region
        in: body
        type: string
        description: Azure region for the environment.
      steps:
      - name: create-env
        type: call
        call: pp-admin.create-environment
        with:
          display_name: '{{display_name}}'
          environment_type: '{{environment_type}}'
          region: '{{region}}'
      - name: apply-dlp
        type: call
        call: pp-admin.apply-dlp-policy
        with:
          environment_id: '{{create-env.environment_id}}'
      - name: notify-admins
        type: call
        call: msteams-pp-admin.post-channel-message
        with:
          channel_id: PlatformAdmins
          text: 'New Power Platform environment provisioned: {{display_name}} ({{environment_type}}) in {{region}}. Environment ID: {{create-env.environment_id}}. DLP policies applied.'
  consumes:
  - type: http
    namespace: pp-admin
    baseUri: https://api.bap.microsoft.com
    authentication:
      type: bearer
      token: $secrets.power_platform_token
    resources:
    - name: environments
      path: /providers/Microsoft.BusinessAppPlatform/environments
      operations:
      - name: create-environment
        method: POST
    - name: dlp-policies
      path: /providers/Microsoft.BusinessAppPlatform/environments/{{environment_id}}/dlpPolicies
      inputParameters:
      - name: environment_id
        in: path
      operations:
      - name: apply-dlp-policy
        method: POST
  - type: http
    namespace: msteams-pp-admin
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-platform-environment-provisioner.yml

When an Azure budget threshold is exceeded, fetches the budget details, posts alerts to both Microsoft Teams and Slack finance channels for cross-platform visibility.

naftiko: '0.5'
info:
  label: Azure Budget Alert to Slack and Teams
  description: When an Azure budget threshold is exceeded, fetches the budget details, posts alerts to both Microsoft Teams and Slack finance channels for cross-platform visibility.
  tags:
  - finops
  - azure
  - microsoft-teams
  - slack
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: budget-alert
    port: 8080
    tools:
    - name: broadcast-budget-alert
      description: Fetch Azure budget status and broadcast alerts to both Teams and Slack.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: budget_name
        in: body
        type: string
        description: Azure budget name.
      steps:
      - name: get-budget
        type: call
        call: azure-budgets.get-budget
        with:
          subscription_id: '{{subscription_id}}'
          budget_name: '{{budget_name}}'
      - name: alert-teams
        type: call
        call: msteams-finance.post-channel-message
        with:
          channel_id: Finance
          text: 'Budget alert: {{budget_name}} at {{get-budget.current_spend_percentage}}% of limit (${{get-budget.amount}}). Current spend: ${{get-budget.current_spend}}.'
      - name: alert-slack
        type: call
        call: slack-finance.post-message
        with:
          channel: finance-alerts
          text: 'Azure budget {{budget_name}} exceeded threshold. Spend: ${{get-budget.current_spend}} / ${{get-budget.amount}}.'
  consumes:
  - type: http
    namespace: azure-budgets
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: budgets
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.Consumption/budgets/{{budget_name}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: budget_name
        in: path
      operations:
      - name: get-budget
        method: GET
  - type: http
    namespace: msteams-finance
    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: post-channel-message
        method: POST
  - type: http
    namespace: slack-finance
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → azure-budget-alert-to-slack-and-teams.yml

When an employee is terminated in Workday, disables their Azure AD account, revokes active sessions, removes Microsoft 365 licenses, and posts a summary to Microsoft Teams IT channel.

naftiko: '0.5'
info:
  label: Azure AD User Offboarding
  description: When an employee is terminated in Workday, disables their Azure AD account, revokes active sessions, removes Microsoft 365 licenses, and posts a summary to Microsoft Teams IT channel.
  tags:
  - hr
  - offboarding
  - workday
  - microsoft-graph
  - azure-ad
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID for a terminated employee, disable their Azure AD account, revoke sessions, remove M365 licenses, and notify the IT Teams channel.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID for the terminated employee.
      - name: termination_date
        in: body
        type: string
        description: Effective termination date in ISO 8601 format.
      steps:
      - name: get-worker
        type: call
        call: workday-lookup.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: disable-user
        type: call
        call: msgraph-offboard.disable-user
        with:
          user_id: '{{get-worker.azure_object_id}}'
      - name: revoke-sessions
        type: call
        call: msgraph-offboard.revoke-sessions
        with:
          user_id: '{{get-worker.azure_object_id}}'
      - name: notify-it
        type: call
        call: msteams-offboard.post-channel-message
        with:
          channel_id: IT-Alerts
          text: 'Offboarding complete for {{get-worker.full_name}} (termination: {{termination_date}}). AAD account disabled.'
  consumes:
  - type: http
    namespace: workday-lookup
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /microsoft/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: user-account
      path: /users/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: disable-user
        method: PATCH
    - name: user-sessions
      path: /users/{{user_id}}/revokeSignInSessions
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: revoke-sessions
        method: POST
  - type: http
    namespace: msteams-offboard
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-ad-user-offboarding.yml

Exports current headcount data from Workday by department and cost center, then pushes the dataset to Power BI for executive workforce analytics dashboards.

naftiko: '0.5'
info:
  label: Workday Headcount Reporting to Power BI
  description: Exports current headcount data from Workday by department and cost center, then pushes the dataset to Power BI for executive workforce analytics dashboards.
  tags:
  - hr
  - finance
  - workday
  - power-bi
  - reporting
  - headcount
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: publish-headcount-to-powerbi
      description: Fetch current headcount data from Workday grouped by department and cost center, and push it to a Power BI streaming dataset for executive workforce analytics.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID to push headcount rows into.
      - name: as_of_date
        in: body
        type: string
        description: The effective date for the headcount snapshot in ISO 8601 format.
      steps:
      - name: export-headcount
        type: call
        call: workday-hc.export-workers
        with:
          as_of_date: '{{as_of_date}}'
      - name: push-to-powerbi
        type: call
        call: powerbi-hc.push-rows
        with:
          dataset_id: '{{dataset_id}}'
          rows: '{{export-headcount.rows}}'
  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: worker-exports
      path: /microsoft/workers/export
      inputParameters:
      - name: as_of_date
        in: query
      operations:
      - name: export-workers
        method: GET
  - type: http
    namespace: powerbi-hc
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-rows
      path: /datasets/{{dataset_id}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → workday-headcount-reporting-to-power-bi.yml

Sends a ServiceNow incident description to Anthropic Claude for intelligent triage categorization, updates the incident with the AI-recommended category and priority, and notifies the IT ops Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Anthropic AI Triage Assistant
  description: Sends a ServiceNow incident description to Anthropic Claude for intelligent triage categorization, updates the incident with the AI-recommended category and priority, and notifies the IT ops Microsoft Teams channel.
  tags:
  - ai
  - itsm
  - anthropic
  - servicenow
  - microsoft-teams
  - intelligent-triage
capability:
  exposes:
  - type: mcp
    namespace: ai-triage
    port: 8080
    tools:
    - name: triage-incident-with-ai
      description: Given a ServiceNow incident number, send its description to Anthropic Claude for category and priority recommendations, update the incident with the AI output, and notify the IT Teams channel.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number to triage, e.g. INC0012345.
      steps:
      - name: get-incident
        type: call
        call: servicenow-triage.get-incident
        with:
          number: '{{incident_number}}'
      - name: ai-categorize
        type: call
        call: anthropic.create-message
        with:
          model: claude-opus-4-5
          content: 'Categorize this IT incident and recommend priority (P1-P4): {{get-incident.description}}'
      - name: update-incident
        type: call
        call: servicenow-triage.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          category: '{{ai-categorize.category}}'
          priority: '{{ai-categorize.priority}}'
      - name: notify-it-ops
        type: call
        call: msteams-triage.post-channel-message
        with:
          channel_id: ITOps
          text: 'AI triage complete for {{incident_number}}: Category={{ai-categorize.category}} Priority={{ai-categorize.priority}}'
  consumes:
  - type: http
    namespace: servicenow-triage
    baseUri: https://microsoft.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: get-incident
        method: GET
      - name: update-incident
        method: PATCH
  - 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-triage
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → anthropic-ai-triage-assistant.yml

Invokes an Azure Function via its HTTP trigger endpoint, passing a JSON payload and returning the function response.

naftiko: '0.5'
info:
  label: Azure Function Invocation
  description: Invokes an Azure Function via its HTTP trigger endpoint, passing a JSON payload and returning the function response.
  tags:
  - cloud
  - serverless
  - azure-functions
  - compute
capability:
  exposes:
  - type: mcp
    namespace: azure-fn
    port: 8080
    tools:
    - name: invoke-function
      description: Invoke an Azure Function by its HTTP trigger URL with a JSON payload.
      inputParameters:
      - name: function_url
        in: body
        type: string
        description: Full HTTP trigger URL for the Azure Function.
  consumes:
  - type: http
    namespace: azure-func
    baseUri: '{{function_url}}'
    authentication:
      type: apiKey
      name: x-functions-key
      value: $secrets.azure_function_key
    resources:
    - name: trigger
      path: /
      operations:
      - name: invoke
        method: POST
Open in Framework → View in Fleet → azure-function-invocation.yml

Creates a new work item in an Azure DevOps project given the organization, project, work item type, and title.

naftiko: '0.5'
info:
  label: Azure DevOps Work Item Creator
  description: Creates a new work item in an Azure DevOps project given the organization, project, work item type, and title.
  tags:
  - devops
  - project-management
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: ado-workitems
    port: 8080
    tools:
    - name: create-work-item
      description: Create a work item in Azure DevOps with the specified type and title.
      inputParameters:
      - name: organization
        in: body
        type: string
        description: Azure DevOps organization name.
      - name: project
        in: body
        type: string
        description: Project name.
      - name: work_item_type
        in: body
        type: string
        description: Work item type such as Bug, Task, or User Story.
      - name: title
        in: body
        type: string
        description: Title for the work item.
  consumes:
  - type: http
    namespace: ado-api
    baseUri: https://dev.azure.com/{{organization}}/{{project}}/_apis/wit
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: work-items
      path: /workitems/${{work_item_type}}
      inputParameters:
      - name: work_item_type
        in: path
      operations:
      - name: create-item
        method: POST
Open in Framework → View in Fleet → azure-devops-work-item-creator.yml

Publishes a text post to a LinkedIn company page using the LinkedIn Marketing API.

naftiko: '0.5'
info:
  label: LinkedIn Company Page Post
  description: Publishes a text post to a LinkedIn company page using the LinkedIn Marketing API.
  tags:
  - social-media
  - marketing
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: linkedin-posts
    port: 8080
    tools:
    - name: publish-company-post
      description: Publish a text post to a LinkedIn company page.
      inputParameters:
      - name: organization_id
        in: body
        type: string
        description: LinkedIn organization URN ID.
      - name: post_text
        in: body
        type: string
        description: Text content for the post.
  consumes:
  - type: http
    namespace: linkedin-api
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: ugc-posts
      path: /ugcPosts
      operations:
      - name: create-post
        method: POST
Open in Framework → View in Fleet → linkedin-company-page-post.yml

When Microsoft Defender for Endpoint raises a high-severity alert, fetches incident details, isolates the affected device, notifies the security team on Teams, and opens a ServiceNow incident.

naftiko: '0.5'
info:
  label: Defender Threat Incident Handler
  description: When Microsoft Defender for Endpoint raises a high-severity alert, fetches incident details, isolates the affected device, notifies the security team on Teams, and opens a ServiceNow incident.
  tags:
  - security
  - microsoft-defender
  - incident-response
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: threat-response
    port: 8080
    tools:
    - name: handle-defender-alert
      description: Process a Defender for Endpoint alert by fetching details, isolating the device, notifying security, and opening a ServiceNow incident.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: Defender alert ID.
      - name: device_id
        in: body
        type: string
        description: Device ID to isolate.
      steps:
      - name: get-alert
        type: call
        call: defender-api.get-alert-details
        with:
          alert_id: '{{alert_id}}'
      - name: isolate-device
        type: call
        call: defender-api.isolate-machine
        with:
          device_id: '{{device_id}}'
      - name: notify-security
        type: call
        call: msteams-security.post-channel-message
        with:
          channel_id: SecurityOps
          text: 'CRITICAL: Defender alert {{alert_id}} — {{get-alert.title}}. Device {{device_id}} isolated.'
      - name: open-incident
        type: call
        call: servicenow-sec.create-incident
        with:
          short_description: 'Defender alert: {{get-alert.title}}'
          urgency: '1'
          description: 'Alert ID: {{alert_id}}

            Device: {{device_id}}

            Severity: {{get-alert.severity}}'
  consumes:
  - type: http
    namespace: defender-api
    baseUri: https://api.securitycenter.microsoft.com/api
    authentication:
      type: bearer
      token: $secrets.defender_token
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert-details
        method: GET
    - name: machines
      path: /machines/{{device_id}}/isolate
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: isolate-machine
        method: POST
  - type: http
    namespace: msteams-security
    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: post-channel-message
        method: POST
  - type: http
    namespace: servicenow-sec
    baseUri: https://microsoft.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 → defender-threat-incident-handler.yml

On a GitHub Actions workflow failure on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams engineering channel, and adds a Datadog deployment marker.

naftiko: '0.5'
info:
  label: GitHub Actions Pipeline Failure Handler
  description: On a GitHub Actions workflow failure on a protected branch, creates a Jira bug, posts an alert to Microsoft Teams engineering channel, and adds a Datadog deployment marker.
  tags:
  - devops
  - cicd
  - github
  - github-actions
  - jira
  - microsoft-teams
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: devops-cicd
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub Actions workflow failure, create a Jira bug in the ENG project, post an alert to Teams engineering channel, and add a Datadog deployment event marker.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: workflow_name
        in: body
        type: string
        description: Name of the GitHub Actions workflow that failed.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions run ID for the failed workflow.
      - name: branch
        in: body
        type: string
        description: Branch name on which the failure occurred.
      - name: commit_sha
        in: body
        type: string
        description: Git commit SHA that triggered the failing run.
      steps:
      - name: create-jira-bug
        type: call
        call: jira-eng.create-issue
        with:
          project_key: ENG
          issuetype: Bug
          summary: '[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}'
          description: 'Run ID: {{run_id}}

            Commit: {{commit_sha}}

            Repo: {{repo}}'
      - name: post-teams-alert
        type: call
        call: msteams-cicd.post-channel-message
        with:
          channel_id: Engineering
          text: 'Pipeline failure: {{workflow_name}} on {{branch}} in {{repo}}. Jira: {{create-jira-bug.key}}'
      - name: add-datadog-event
        type: call
        call: datadog.create-event
        with:
          title: 'CI Failure: {{repo}}/{{branch}}'
          text: Workflow {{workflow_name}} failed on commit {{commit_sha}}
          tags: env:ci,repo:{{repo}}
  consumes:
  - type: http
    namespace: jira-eng
    baseUri: https://microsoft.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-cicd
    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: post-channel-message
        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 → github-actions-pipeline-failure-handler.yml

When a user submits a helpdesk request via Teams, classifies the request using Azure OpenAI, creates a ServiceNow ticket in the appropriate category, and sends a confirmation back to the user in Teams.

naftiko: '0.5'
info:
  label: Teams Helpdesk Ticket Router
  description: When a user submits a helpdesk request via Teams, classifies the request using Azure OpenAI, creates a ServiceNow ticket in the appropriate category, and sends a confirmation back to the user in Teams.
  tags:
  - support
  - microsoft-teams
  - ai
  - servicenow
  - helpdesk
capability:
  exposes:
  - type: mcp
    namespace: helpdesk-router
    port: 8080
    tools:
    - name: route-helpdesk-request
      description: Classify a helpdesk request, create a ServiceNow ticket, and confirm back in Teams.
      inputParameters:
      - name: user_message
        in: body
        type: string
        description: User's helpdesk request message.
      - name: user_id
        in: body
        type: string
        description: Teams user ID of the requester.
      steps:
      - name: classify-request
        type: call
        call: azure-openai-classify.create-completion
        with:
          deployment_id: gpt-4o
          prompt: 'Classify the following IT support request into one of: Hardware, Software, Network, Account, Other.


            Request: {{user_message}}'
      - name: create-ticket
        type: call
        call: servicenow-helpdesk.create-incident
        with:
          short_description: '{{user_message}}'
          category: '{{classify-request.response}}'
      - name: confirm-user
        type: call
        call: msteams-helpdesk.send-chat-message
        with:
          user_id: '{{user_id}}'
          text: 'Your request has been logged as ticket {{create-ticket.number}} (Category: {{classify-request.response}}). A technician will reach out shortly.'
  consumes:
  - type: http
    namespace: azure-openai-classify
    baseUri: https://$secrets.azure_openai_endpoint.openai.azure.com/openai/deployments/{{deployment_id}}
    authentication:
      type: apiKey
      name: api-key
      value: $secrets.azure_openai_key
    resources:
    - name: completions
      path: /chat/completions
      inputParameters:
      - name: deployment_id
        in: path
      operations:
      - name: create-completion
        method: POST
  - type: http
    namespace: servicenow-helpdesk
    baseUri: https://microsoft.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-helpdesk
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{user_id}}/chats/messages
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: send-chat-message
        method: POST
Open in Framework → View in Fleet → teams-helpdesk-ticket-router.yml

When a Terraform Cloud run completes in a production workspace, creates a ServiceNow change record, logs the change in Datadog, and notifies the Cloud Operations Teams channel.

naftiko: '0.5'
info:
  label: Azure Infrastructure Change Management
  description: When a Terraform Cloud run completes in a production workspace, creates a ServiceNow change record, logs the change in Datadog, and notifies the Cloud Operations Teams channel.
  tags:
  - cloud
  - infrastructure
  - terraform
  - servicenow
  - datadog
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: change-management
    port: 8080
    tools:
    - name: register-infrastructure-change
      description: Given a completed Terraform Cloud run ID and workspace name, create a ServiceNow change record, push a Datadog deployment event, and post the change summary to the CloudOps Teams channel.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: Terraform Cloud run ID that completed.
      - name: workspace_name
        in: body
        type: string
        description: Terraform Cloud workspace name, used as the environment identifier.
      - name: applied_by
        in: body
        type: string
        description: UPN of the user or service principal that triggered the apply.
      steps:
      - name: get-run
        type: call
        call: terraform-change.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-change
        type: call
        call: servicenow-change.create-change
        with:
          short_description: 'Infrastructure change: {{workspace_name}} — Terraform run {{run_id}}'
          category: infrastructure
          applied_by: '{{applied_by}}'
      - name: log-datadog-event
        type: call
        call: datadog-change.create-event
        with:
          title: 'Terraform Apply: {{workspace_name}}'
          text: 'Run ID: {{run_id}} | Status: {{get-run.status}} | Applied by: {{applied_by}}'
          tags: env:{{workspace_name}},source:terraform
      - name: notify-cloudops
        type: call
        call: msteams-cloudops.post-channel-message
        with:
          channel_id: CloudOps
          text: 'Infrastructure change applied: {{workspace_name}} | Run: {{run_id}} | SNOW: {{create-change.number}}'
  consumes:
  - type: http
    namespace: terraform-change
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: servicenow-change
    baseUri: https://microsoft.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: datadog-change
    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-cloudops
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-infrastructure-change-management.yml

Reads data from an Excel Online workbook stored in SharePoint, transforms it for a Power BI push dataset, and posts a data freshness confirmation to the analytics Teams channel.

naftiko: '0.5'
info:
  label: Excel Online Data Pipeline
  description: Reads data from an Excel Online workbook stored in SharePoint, transforms it for a Power BI push dataset, and posts a data freshness confirmation to the analytics Teams channel.
  tags:
  - data
  - microsoft-excel
  - sharepoint
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: excel-pipeline
    port: 8080
    tools:
    - name: sync-excel-to-powerbi
      description: Read Excel data from SharePoint, push to Power BI, and confirm data freshness.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: item_id
        in: body
        type: string
        description: Excel workbook item ID.
      - name: sheet_name
        in: body
        type: string
        description: Worksheet name to read.
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID.
      steps:
      - name: read-excel
        type: call
        call: graph-excel.get-range
        with:
          site_id: '{{site_id}}'
          item_id: '{{item_id}}'
          sheet_name: '{{sheet_name}}'
      - name: push-to-powerbi
        type: call
        call: powerbi-excel.push-rows
        with:
          dataset_id: '{{dataset_id}}'
          rows: '{{read-excel.values}}'
      - name: confirm-freshness
        type: call
        call: msteams-analytics.post-channel-message
        with:
          channel_id: Analytics
          text: 'Excel data pipeline complete: {{read-excel.row_count}} rows from {{sheet_name}} pushed to Power BI dataset {{dataset_id}}.'
  consumes:
  - type: http
    namespace: graph-excel
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: ranges
      path: /sites/{{site_id}}/drive/items/{{item_id}}/workbook/worksheets/{{sheet_name}}/usedRange
      inputParameters:
      - name: site_id
        in: path
      - name: item_id
        in: path
      - name: sheet_name
        in: path
      operations:
      - name: get-range
        method: GET
  - type: http
    namespace: powerbi-excel
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-rows
      path: /datasets/{{dataset_id}}/tables/ExcelData/rows
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: push-rows
        method: POST
  - type: http
    namespace: msteams-analytics
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → excel-online-data-pipeline.yml

Queries Microsoft Graph for assigned Microsoft 365 licenses and compares usage with actual sign-in activity, then posts an optimization report to SharePoint and alerts the IT Procurement Teams channel.

naftiko: '0.5'
info:
  label: Microsoft 365 License Optimization Report
  description: Queries Microsoft Graph for assigned Microsoft 365 licenses and compares usage with actual sign-in activity, then posts an optimization report to SharePoint and alerts the IT Procurement Teams channel.
  tags:
  - it
  - licensing
  - microsoft-graph
  - sharepoint
  - microsoft-teams
  - cost-optimization
capability:
  exposes:
  - type: mcp
    namespace: license-ops
    port: 8080
    tools:
    - name: generate-license-optimization-report
      description: Query all assigned Microsoft 365 licenses via Microsoft Graph, identify users with no sign-in in the last 90 days, save a report to SharePoint, and alert the IT Procurement Teams channel with reclamation candidates.
      inputParameters:
      - name: inactive_days_threshold
        in: body
        type: integer
        description: Number of days without sign-in to flag a user as inactive. Default is 90.
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID where the license report will be saved.
      steps:
      - name: get-license-details
        type: call
        call: msgraph-licenses.list-subscribed-skus
        with:
          inactive_threshold: '{{inactive_days_threshold}}'
      - name: save-report
        type: call
        call: sharepoint-licenses.create-file
        with:
          site_id: '{{sharepoint_site_id}}'
          file_name: LicenseOptimizationReport.csv
          content: '{{get-license-details.csv_data}}'
      - name: alert-procurement
        type: call
        call: msteams-procurement.post-channel-message
        with:
          channel_id: ITProcurement
          text: 'License optimization: {{get-license-details.reclaimable_count}} licenses reclaimable from inactive users. Report: {{save-report.file_url}}'
  consumes:
  - type: http
    namespace: msgraph-licenses
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: subscribed-skus
      path: /subscribedSkus
      inputParameters:
      - name: inactive_threshold
        in: query
      operations:
      - name: list-subscribed-skus
        method: GET
  - type: http
    namespace: sharepoint-licenses
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-file
        method: POST
  - type: http
    namespace: msteams-procurement
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → microsoft-365-license-optimization-report.yml

Triggers an Azure Machine Learning model deployment, monitors the endpoint health, and posts deployment status to the ML engineering Teams channel.

naftiko: '0.5'
info:
  label: Azure ML Model Deployment Pipeline
  description: Triggers an Azure Machine Learning model deployment, monitors the endpoint health, and posts deployment status to the ML engineering Teams channel.
  tags:
  - ai
  - machine-learning
  - azure-machine-learning
  - microsoft-teams
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: ml-deploy
    port: 8080
    tools:
    - name: deploy-model
      description: Deploy an Azure ML model to a managed endpoint, check health, and notify the ML team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: workspace_name
        in: body
        type: string
        description: Azure ML workspace name.
      - name: endpoint_name
        in: body
        type: string
        description: Managed endpoint name.
      steps:
      - name: create-deployment
        type: call
        call: azureml-api.create-deployment
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          workspace_name: '{{workspace_name}}'
          endpoint_name: '{{endpoint_name}}'
      - name: check-health
        type: call
        call: azureml-api.get-endpoint
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          workspace_name: '{{workspace_name}}'
          endpoint_name: '{{endpoint_name}}'
      - name: notify-ml-team
        type: call
        call: msteams-ml.post-channel-message
        with:
          channel_id: MLEngineering
          text: 'Model deployed to endpoint {{endpoint_name}}. Status: {{check-health.provisioning_state}}. Scoring URI: {{check-health.scoring_uri}}'
  consumes:
  - type: http
    namespace: azureml-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: deployments
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.MachineLearningServices/workspaces/{{workspace_name}}/onlineEndpoints/{{endpoint_name}}/deployments
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: workspace_name
        in: path
      - name: endpoint_name
        in: path
      operations:
      - name: create-deployment
        method: PUT
    - name: endpoints
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.MachineLearningServices/workspaces/{{workspace_name}}/onlineEndpoints/{{endpoint_name}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: workspace_name
        in: path
      - name: endpoint_name
        in: path
      operations:
      - name: get-endpoint
        method: GET
  - type: http
    namespace: msteams-ml
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-ml-model-deployment-pipeline.yml

When a Salesforce opportunity is marked Closed Won, fetches deal details, updates the Dynamics 365 ERP account record, and sends a congratulatory Microsoft Teams message to the owning sales rep.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Close Notification
  description: When a Salesforce opportunity is marked Closed Won, fetches deal details, updates the Dynamics 365 ERP account record, and sends a congratulatory Microsoft Teams message to the owning sales rep.
  tags:
  - sales
  - crm
  - salesforce
  - dynamics-365
  - microsoft-teams
  - opportunity-management
capability:
  exposes:
  - type: mcp
    namespace: sales-closures
    port: 8080
    tools:
    - name: handle-opportunity-closed-won
      description: Given a Salesforce opportunity ID marked Closed Won, fetch deal details, update the linked Dynamics 365 account with deal value, and send a Teams congratulations to the owning rep.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID that was marked Closed Won.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opps.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: update-dynamics-account
        type: call
        call: dynamics365-accounts.update-account
        with:
          account_id: '{{get-opportunity.account_id}}'
          deal_value: '{{get-opportunity.amount}}'
      - name: notify-rep
        type: call
        call: msteams-sales-notify.send-message
        with:
          recipient_upn: '{{get-opportunity.owner_email}}'
          text: Congratulations! Opportunity {{get-opportunity.name}} closed for ${{get-opportunity.amount}}. Dynamics account updated.
  consumes:
  - type: http
    namespace: salesforce-opps
    baseUri: https://microsoft.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: dynamics365-accounts
    baseUri: https://microsoft.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics365_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: msteams-sales-notify
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: user-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-opportunity-close-notification.yml

Retrieves a user profile from Microsoft Entra ID via the Microsoft Graph API given a user principal name or object ID.

naftiko: '0.5'
info:
  label: Microsoft Graph User Lookup
  description: Retrieves a user profile from Microsoft Entra ID via the Microsoft Graph API given a user principal name or object ID.
  tags:
  - identity
  - microsoft-graph
  - entra
  - azure-active-directory
capability:
  exposes:
  - type: mcp
    namespace: graph-users
    port: 8080
    tools:
    - name: get-user-profile
      description: Look up a user profile in Microsoft Entra ID by user principal name or object ID.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: User principal name or object ID.
  consumes:
  - type: http
    namespace: msgraph-users
    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: get-user
        method: GET
Open in Framework → View in Fleet → microsoft-graph-user-lookup.yml

Audits Entra ID conditional access policies for compliance gaps, generates a summary report, and sends the findings to the security team via email and Teams.

naftiko: '0.5'
info:
  label: Entra Conditional Access Compliance Checker
  description: Audits Entra ID conditional access policies for compliance gaps, generates a summary report, and sends the findings to the security team via email and Teams.
  tags:
  - security
  - identity
  - entra
  - compliance
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: ca-compliance
    port: 8080
    tools:
    - name: audit-conditional-access
      description: Audit Entra ID conditional access policies and report compliance findings to the security team.
      inputParameters:
      - name: policy_filter
        in: body
        type: string
        description: Optional filter to scope policies, e.g. displayName prefix.
      steps:
      - name: list-policies
        type: call
        call: graph-ca.list-policies
        with: {}
      - name: notify-teams
        type: call
        call: msteams-compliance.post-channel-message
        with:
          channel_id: SecurityCompliance
          text: 'Conditional Access audit complete. Policies reviewed: {{list-policies.count}}. Non-compliant: {{list-policies.non_compliant_count}}'
      - name: email-report
        type: call
        call: graph-mail.send-mail
        with:
          sender_id: compliance-bot@microsoft.com
          subject: Conditional Access Compliance Report
          body: 'Policies reviewed: {{list-policies.count}}. Non-compliant: {{list-policies.non_compliant_count}}. Review in Entra admin center.'
  consumes:
  - type: http
    namespace: graph-ca
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: policies
      path: /identity/conditionalAccess/policies
      operations:
      - name: list-policies
        method: GET
  - type: http
    namespace: msteams-compliance
    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: post-channel-message
        method: POST
  - type: http
    namespace: graph-mail
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → entra-conditional-access-compliance-checker.yml

When an Azure Data Factory pipeline run fails, fetches the error details, posts an alert to the data engineering Teams channel, and opens a Jira ticket for investigation.

naftiko: '0.5'
info:
  label: Azure Data Factory Pipeline Failure Handler
  description: When an Azure Data Factory pipeline run fails, fetches the error details, posts an alert to the data engineering Teams channel, and opens a Jira ticket for investigation.
  tags:
  - data
  - etl
  - azure-data-factory
  - microsoft-teams
  - jira
capability:
  exposes:
  - type: mcp
    namespace: adf-failure
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Process an ADF pipeline failure by fetching run details, alerting the data team, and creating a Jira issue.
      inputParameters:
      - name: factory_name
        in: body
        type: string
        description: Azure Data Factory name.
      - name: run_id
        in: body
        type: string
        description: Pipeline run ID.
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      steps:
      - name: get-run-details
        type: call
        call: adf-api.get-pipeline-run
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          factory_name: '{{factory_name}}'
          run_id: '{{run_id}}'
      - name: alert-data-team
        type: call
        call: msteams-data.post-channel-message
        with:
          channel_id: DataEngineering
          text: 'ADF pipeline failure in {{factory_name}}. Pipeline: {{get-run-details.pipeline_name}}. Error: {{get-run-details.error_message}}'
      - name: create-jira-ticket
        type: call
        call: jira-data.create-issue
        with:
          project_key: DATA
          issue_type: Bug
          summary: 'ADF pipeline failure: {{get-run-details.pipeline_name}} in {{factory_name}}'
          description: 'Run ID: {{run_id}}

            Error: {{get-run-details.error_message}}'
  consumes:
  - type: http
    namespace: adf-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: pipeline-runs
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.DataFactory/factories/{{factory_name}}/pipelineruns/{{run_id}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: factory_name
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-pipeline-run
        method: GET
  - 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/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
  - type: http
    namespace: jira-data
    baseUri: https://microsoft.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 → azure-data-factory-pipeline-failure-handler.yml

Sends a message to an Azure Service Bus queue for asynchronous processing by downstream consumers.

naftiko: '0.5'
info:
  label: Azure Service Bus Message Sender
  description: Sends a message to an Azure Service Bus queue for asynchronous processing by downstream consumers.
  tags:
  - messaging
  - integration
  - azure
  - service-bus
capability:
  exposes:
  - type: mcp
    namespace: servicebus-send
    port: 8080
    tools:
    - name: send-message
      description: Send a message to an Azure Service Bus queue.
      inputParameters:
      - name: namespace_name
        in: body
        type: string
        description: Service Bus namespace name.
      - name: queue_name
        in: body
        type: string
        description: Target queue name.
      - name: message_body
        in: body
        type: string
        description: Message payload.
  consumes:
  - type: http
    namespace: azure-servicebus
    baseUri: https://{{namespace_name}}.servicebus.windows.net
    authentication:
      type: bearer
      token: $secrets.servicebus_token
    resources:
    - name: queue-messages
      path: /{{queue_name}}/messages
      inputParameters:
      - name: queue_name
        in: path
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → azure-service-bus-message-sender.yml

On a pull request to main, runs a code coverage check via GitHub Actions status API, blocks merge if coverage drops below threshold, and posts the gate result to Jira and Microsoft Teams.

naftiko: '0.5'
info:
  label: GitHub Code Quality Gate
  description: On a pull request to main, runs a code coverage check via GitHub Actions status API, blocks merge if coverage drops below threshold, and posts the gate result to Jira and Microsoft Teams.
  tags:
  - devops
  - code-quality
  - github
  - jira
  - microsoft-teams
  - testing
capability:
  exposes:
  - type: mcp
    namespace: quality-gates
    port: 8080
    tools:
    - name: enforce-coverage-gate
      description: Given a GitHub repo, PR number, and minimum coverage threshold, check the PR's coverage status from GitHub Checks API, comment the result on the PR, and post to Engineering Teams if the gate fails.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: pr_number
        in: body
        type: integer
        description: Pull request number to check coverage for.
      - name: coverage_threshold
        in: body
        type: number
        description: Minimum code coverage percentage required to pass, e.g. 80.0.
      steps:
      - name: get-check-runs
        type: call
        call: github-checks.list-check-runs
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
      - name: post-pr-comment
        type: call
        call: github-comments.create-pr-comment
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
          body: 'Coverage gate: {{get-check-runs.coverage}}% (threshold: {{coverage_threshold}}%) — {{get-check-runs.gate_result}}'
      - name: notify-eng
        type: call
        call: msteams-quality.post-channel-message
        with:
          channel_id: Engineering
          text: 'Coverage gate {{get-check-runs.gate_result}} for PR #{{pr_number}} in {{repo}}. Coverage: {{get-check-runs.coverage}}%'
  consumes:
  - type: http
    namespace: github-checks
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: check-runs
      path: /repos/{{repo}}/commits/{{pr_number}}/check-runs
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: list-check-runs
        method: GET
  - type: http
    namespace: github-comments
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issue-comments
      path: /repos/{{repo}}/issues/{{pr_number}}/comments
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: create-pr-comment
        method: POST
  - type: http
    namespace: msteams-quality
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-code-quality-gate.yml

When a Microsoft 365 DLP policy match is detected, fetches the incident details from the Compliance Center, notifies the compliance officer via email, and logs the event to a SharePoint audit trail.

naftiko: '0.5'
info:
  label: Microsoft 365 DLP Incident Handler
  description: When a Microsoft 365 DLP policy match is detected, fetches the incident details from the Compliance Center, notifies the compliance officer via email, and logs the event to a SharePoint audit trail.
  tags:
  - compliance
  - data-loss-prevention
  - microsoft-365
  - microsoft-outlook
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: dlp-handler
    port: 8080
    tools:
    - name: handle-dlp-incident
      description: Process a DLP policy match by fetching details, notifying compliance, and logging to SharePoint.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: DLP incident ID.
      steps:
      - name: get-incident
        type: call
        call: compliance-api.get-dlp-incident
        with:
          incident_id: '{{incident_id}}'
      - name: email-compliance
        type: call
        call: graph-mail-dlp.send-mail
        with:
          sender_id: dlp-alerts@microsoft.com
          subject: DLP Policy Match — Incident {{incident_id}}
          body: 'Policy: {{get-incident.policy_name}}. Matched content in {{get-incident.location}}. Sensitivity: {{get-incident.sensitivity_label}}. Review required.'
      - name: log-audit
        type: call
        call: graph-sp-dlp.create-list-item
        with:
          site_id: compliance-hub
          list_id: dlp-audit-trail
  consumes:
  - type: http
    namespace: compliance-api
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: dlp-incidents
      path: /security/informationProtection/dlpIncidents/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-dlp-incident
        method: GET
  - type: http
    namespace: graph-mail-dlp
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: graph-sp-dlp
    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 → microsoft-365-dlp-incident-handler.yml

Queries open opportunities from Dynamics 365 CRM and pushes a refreshed dataset to Power BI for executive pipeline reporting.

naftiko: '0.5'
info:
  label: Dynamics 365 Opportunity Sync to Power BI
  description: Queries open opportunities from Dynamics 365 CRM and pushes a refreshed dataset to Power BI for executive pipeline reporting.
  tags:
  - sales
  - crm
  - dynamics-365
  - power-bi
  - reporting
  - data
capability:
  exposes:
  - type: mcp
    namespace: sales-reporting
    port: 8080
    tools:
    - name: sync-pipeline-to-powerbi
      description: Given a Dynamics 365 sales stage filter, query all open opportunities and push the results to a Power BI streaming dataset for live pipeline dashboards.
      inputParameters:
      - name: stage_filter
        in: body
        type: string
        description: Opportunity sales stage to filter by, e.g. 'Proposal' or 'Negotiation'.
      - name: dataset_id
        in: body
        type: string
        description: Power BI streaming dataset ID to push rows into.
      steps:
      - name: get-opportunities
        type: call
        call: dynamics365.list-opportunities
        with:
          stage: '{{stage_filter}}'
      - name: push-to-powerbi
        type: call
        call: powerbi.push-rows
        with:
          dataset_id: '{{dataset_id}}'
          rows: '{{get-opportunities.records}}'
  consumes:
  - type: http
    namespace: dynamics365
    baseUri: https://microsoft.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics365_token
    resources:
    - name: opportunities
      path: /opportunities
      inputParameters:
      - name: stage
        in: query
      operations:
      - name: list-opportunities
        method: GET
  - type: http
    namespace: powerbi
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: streaming-datasets
      path: /datasets/{{dataset_id}}/rows
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → dynamics-365-opportunity-sync-to-power-bi.yml

Monitors Azure Front Door backend health probes, detects unhealthy backends, alerts the networking team on Teams, and creates a PagerDuty incident.

naftiko: '0.5'
info:
  label: Azure Front Door Health Monitor
  description: Monitors Azure Front Door backend health probes, detects unhealthy backends, alerts the networking team on Teams, and creates a PagerDuty incident.
  tags:
  - networking
  - cdn
  - azure
  - monitoring
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: frontdoor-health
    port: 8080
    tools:
    - name: check-backend-health
      description: Check Azure Front Door backend health, alert the networking team, and escalate to PagerDuty if backends are unhealthy.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: frontdoor_name
        in: body
        type: string
        description: Azure Front Door profile name.
      steps:
      - name: get-health
        type: call
        call: frontdoor-api.get-health-probes
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          frontdoor_name: '{{frontdoor_name}}'
      - name: alert-networking
        type: call
        call: msteams-network.post-channel-message
        with:
          channel_id: Networking
          text: 'Front Door {{frontdoor_name}} health check: {{get-health.healthy_count}} healthy, {{get-health.unhealthy_count}} unhealthy backends.'
      - name: escalate-pagerduty
        type: call
        call: pagerduty-network.create-incident
        with:
          service_id: frontdoor-service
          title: Unhealthy backends on Front Door {{frontdoor_name}}
  consumes:
  - type: http
    namespace: frontdoor-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: health-probes
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Network/frontDoors/{{frontdoor_name}}/backendPools/default/healthProbeSettings
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: frontdoor_name
        in: path
      operations:
      - name: get-health-probes
        method: GET
  - type: http
    namespace: msteams-network
    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: post-channel-message
        method: POST
  - type: http
    namespace: pagerduty-network
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: incidents
      path: /incidents
      operations:
      - name: create-incident
        method: POST
Open in Framework → View in Fleet → azure-front-door-health-monitor.yml

Sends a prompt to the Azure OpenAI Service chat completions endpoint and returns the generated response.

naftiko: '0.5'
info:
  label: Copilot Chat Completion
  description: Sends a prompt to the Azure OpenAI Service chat completions endpoint and returns the generated response.
  tags:
  - ai
  - generative-ai
  - azure
  - copilot
  - llm
capability:
  exposes:
  - type: mcp
    namespace: copilot-chat
    port: 8080
    tools:
    - name: chat-complete
      description: Send a user prompt to Azure OpenAI chat completions and return the assistant response.
      inputParameters:
      - name: deployment_id
        in: body
        type: string
        description: Azure OpenAI deployment name.
      - name: prompt
        in: body
        type: string
        description: User prompt text.
  consumes:
  - type: http
    namespace: azure-openai
    baseUri: https://$secrets.azure_openai_endpoint.openai.azure.com/openai/deployments/{{deployment_id}}
    authentication:
      type: apiKey
      name: api-key
      value: $secrets.azure_openai_key
    resources:
    - name: chat-completions
      path: /chat/completions
      inputParameters:
      - name: deployment_id
        in: path
      operations:
      - name: create-completion
        method: POST
Open in Framework → View in Fleet → copilot-chat-completion.yml

Monitors Azure SQL Database availability, triggers failover to the secondary replica when health degrades, and notifies the DBA team on Teams and creates a ServiceNow incident.

naftiko: '0.5'
info:
  label: Azure SQL Database Auto Failover
  description: Monitors Azure SQL Database availability, triggers failover to the secondary replica when health degrades, and notifies the DBA team on Teams and creates a ServiceNow incident.
  tags:
  - database
  - azure
  - high-availability
  - microsoft-teams
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: sql-failover
    port: 8080
    tools:
    - name: trigger-failover
      description: Monitor SQL Database health, trigger failover, and alert the DBA team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: server_name
        in: body
        type: string
        description: Azure SQL server name.
      - name: failover_group
        in: body
        type: string
        description: Failover group name.
      steps:
      - name: initiate-failover
        type: call
        call: sql-api.failover
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          server_name: '{{server_name}}'
          failover_group: '{{failover_group}}'
      - name: alert-dba
        type: call
        call: msteams-dba.post-channel-message
        with:
          channel_id: DBA
          text: 'SQL failover triggered for {{server_name}}/{{failover_group}}. Status: {{initiate-failover.status}}. Verify connectivity.'
      - name: create-snow-incident
        type: call
        call: servicenow-dba.create-incident
        with:
          short_description: 'Azure SQL failover: {{server_name}}/{{failover_group}}'
          urgency: '2'
  consumes:
  - type: http
    namespace: sql-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: failover-groups
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Sql/servers/{{server_name}}/failoverGroups/{{failover_group}}/failover
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: server_name
        in: path
      - name: failover_group
        in: path
      operations:
      - name: failover
        method: POST
  - type: http
    namespace: msteams-dba
    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: post-channel-message
        method: POST
  - type: http
    namespace: servicenow-dba
    baseUri: https://microsoft.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-sql-database-auto-failover.yml

Monitors AKS cluster node health, cordons unhealthy nodes, notifies the platform team on Teams, and creates an Azure DevOps bug for remediation.

naftiko: '0.5'
info:
  label: Azure AKS Node Health Responder
  description: Monitors AKS cluster node health, cordons unhealthy nodes, notifies the platform team on Teams, and creates an Azure DevOps bug for remediation.
  tags:
  - cloud
  - kubernetes
  - azure-kubernetes-service
  - monitoring
  - microsoft-teams
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: aks-health
    port: 8080
    tools:
    - name: handle-unhealthy-node
      description: Process an AKS unhealthy node event by cordoning the node, alerting the platform team, and creating a remediation bug.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group of the AKS cluster.
      - name: cluster_name
        in: body
        type: string
        description: AKS cluster name.
      - name: node_name
        in: body
        type: string
        description: Name of the unhealthy node.
      steps:
      - name: get-node-status
        type: call
        call: aks-api.get-node
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          cluster_name: '{{cluster_name}}'
      - name: notify-platform
        type: call
        call: msteams-platform.post-channel-message
        with:
          channel_id: PlatformEngineering
          text: 'AKS node {{node_name}} in cluster {{cluster_name}} is unhealthy. Status: {{get-node-status.condition}}. Cordon initiated.'
      - name: create-bug
        type: call
        call: ado-platform.create-item
        with:
          title: 'Unhealthy AKS node: {{node_name}} in {{cluster_name}}'
          work_item_type: Bug
  consumes:
  - type: http
    namespace: aks-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: managed-clusters
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: cluster_name
        in: path
      operations:
      - name: get-node
        method: GET
  - type: http
    namespace: msteams-platform
    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: post-channel-message
        method: POST
  - type: http
    namespace: ado-platform
    baseUri: https://dev.azure.com/$secrets.ado_org/Platform/_apis/wit
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: work-items
      path: /workitems/$Bug
      operations:
      - name: create-item
        method: POST
Open in Framework → View in Fleet → azure-aks-node-health-responder.yml

Retrieves a secret value from Azure Key Vault given the vault name and secret name, for use in downstream automation steps.

naftiko: '0.5'
info:
  label: Azure Key Vault Secret Retrieval
  description: Retrieves a secret value from Azure Key Vault given the vault name and secret name, for use in downstream automation steps.
  tags:
  - security
  - azure
  - key-vault
  - secrets-management
capability:
  exposes:
  - type: mcp
    namespace: keyvault-secrets
    port: 8080
    tools:
    - name: get-secret
      description: Retrieve a secret from Azure Key Vault by vault name and secret name.
      inputParameters:
      - name: vault_name
        in: body
        type: string
        description: Azure Key Vault name.
      - name: secret_name
        in: body
        type: string
        description: Name of the secret to retrieve.
  consumes:
  - type: http
    namespace: azure-keyvault
    baseUri: https://{{vault_name}}.vault.azure.net
    authentication:
      type: bearer
      token: $secrets.azure_keyvault_token
    resources:
    - name: secrets
      path: /secrets/{{secret_name}}
      inputParameters:
      - name: secret_name
        in: path
      operations:
      - name: get-secret-value
        method: GET
Open in Framework → View in Fleet → azure-key-vault-secret-retrieval.yml

When a high-priority Dynamics 365 customer service case is created, opens a linked ServiceNow incident for internal tracking and notifies the customer success team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Dynamics 365 Customer Case to ServiceNow Ticket
  description: When a high-priority Dynamics 365 customer service case is created, opens a linked ServiceNow incident for internal tracking and notifies the customer success team via Microsoft Teams.
  tags:
  - customer-support
  - crm
  - dynamics-365
  - servicenow
  - microsoft-teams
  - case-management
capability:
  exposes:
  - type: mcp
    namespace: customer-support
    port: 8080
    tools:
    - name: escalate-customer-case
      description: Given a Dynamics 365 case number with Priority 1 or 2, create a linked ServiceNow incident for internal IT tracking and notify the customer success Teams channel.
      inputParameters:
      - name: case_number
        in: body
        type: string
        description: Dynamics 365 case number to escalate, e.g. CAS-10001.
      - name: customer_name
        in: body
        type: string
        description: Customer display name associated with the case.
      steps:
      - name: get-case
        type: call
        call: dynamics365-cs.get-case
        with:
          case_number: '{{case_number}}'
      - name: create-snow-incident
        type: call
        call: servicenow-cs.create-incident
        with:
          short_description: 'Customer escalation: {{customer_name}} — {{get-case.title}}'
          category: customer_support
          urgency: '{{get-case.priority}}'
      - name: notify-cs-team
        type: call
        call: msteams-cs.post-channel-message
        with:
          channel_id: CustomerSuccess
          text: 'Escalation opened for {{customer_name}}: {{case_number}} | ServiceNow: {{create-snow-incident.number}}'
  consumes:
  - type: http
    namespace: dynamics365-cs
    baseUri: https://microsoft.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics365_token
    resources:
    - name: cases
      path: /incidents/{{case_number}}
      inputParameters:
      - name: case_number
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: servicenow-cs
    baseUri: https://microsoft.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-cs
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → dynamics-365-customer-case-to-servicenow-ticket.yml

Fetches open job requisitions from Workday, creates LinkedIn job postings for each approved position, and reports posting confirmations to a Microsoft Teams HR channel.

naftiko: '0.5'
info:
  label: LinkedIn Talent Campaign Publisher
  description: Fetches open job requisitions from Workday, creates LinkedIn job postings for each approved position, and reports posting confirmations to a Microsoft Teams HR channel.
  tags:
  - hr
  - recruiting
  - workday
  - linkedin
  - microsoft-teams
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: hr-recruiting
    port: 8080
    tools:
    - name: publish-jobs-to-linkedin
      description: Given a Workday job requisition status filter, fetch approved open positions and create LinkedIn job postings for each, then report results to the HR Teams channel.
      inputParameters:
      - name: requisition_status
        in: body
        type: string
        description: Workday requisition status to filter by, e.g. 'Approved' or 'Open'.
      - name: linkedin_organization_id
        in: body
        type: string
        description: LinkedIn Organization ID to post jobs under.
      steps:
      - name: get-requisitions
        type: call
        call: workday-recruiting.list-job-requisitions
        with:
          status: '{{requisition_status}}'
      - name: create-linkedin-jobs
        type: call
        call: linkedin.create-job-posting
        with:
          organization_id: '{{linkedin_organization_id}}'
          job_data: '{{get-requisitions.requisitions}}'
      - name: notify-hr
        type: call
        call: msteams-hr.post-channel-message
        with:
          channel_id: HR-Recruiting
          text: Published {{create-linkedin-jobs.posted_count}} jobs to LinkedIn for organization {{linkedin_organization_id}}.
  consumes:
  - type: http
    namespace: workday-recruiting
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: job-requisitions
      path: /microsoft/jobRequisitions
      inputParameters:
      - name: status
        in: query
      operations:
      - name: list-job-requisitions
        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-hr
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → linkedin-talent-campaign-publisher.yml

Fetches GitHub Copilot usage metrics for an organization, writes them to a Power BI dataset, and posts a weekly summary to the engineering Teams channel.

naftiko: '0.5'
info:
  label: GitHub Copilot Usage Dashboard Sync
  description: Fetches GitHub Copilot usage metrics for an organization, writes them to a Power BI dataset, and posts a weekly summary to the engineering Teams channel.
  tags:
  - devops
  - github-copilot
  - analytics
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: copilot-usage
    port: 8080
    tools:
    - name: sync-copilot-usage
      description: Fetch GitHub Copilot usage data for an org, push to Power BI, and notify the engineering team.
      inputParameters:
      - name: org
        in: body
        type: string
        description: GitHub organization name.
      steps:
      - name: get-usage
        type: call
        call: github-copilot.get-usage-metrics
        with:
          org: '{{org}}'
      - name: push-to-powerbi
        type: call
        call: powerbi-copilot.push-rows
        with:
          dataset_id: copilot-usage-dataset
          rows: '{{get-usage.daily_metrics}}'
      - name: notify-eng
        type: call
        call: msteams-eng.post-channel-message
        with:
          channel_id: Engineering
          text: 'Copilot usage sync complete for {{org}}. Total suggestions accepted: {{get-usage.total_accepted}}. Acceptance rate: {{get-usage.acceptance_rate}}%'
  consumes:
  - type: http
    namespace: github-copilot
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: copilot-usage
      path: /orgs/{{org}}/copilot/usage
      inputParameters:
      - name: org
        in: path
      operations:
      - name: get-usage-metrics
        method: GET
  - type: http
    namespace: powerbi-copilot
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-rows
      path: /datasets/{{dataset_id}}/tables/UsageMetrics/rows
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: push-rows
        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/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-copilot-usage-dashboard-sync.yml

Fetches new Salesforce leads, enriches them with LinkedIn company data, updates Salesforce records with enrichment, and notifies the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Salesforce Lead Enrichment and Sync
  description: Fetches new Salesforce leads, enriches them with LinkedIn company data, updates Salesforce records with enrichment, and notifies the sales team via Microsoft Teams.
  tags:
  - sales
  - crm
  - salesforce
  - linkedin
  - microsoft-teams
  - lead-enrichment
capability:
  exposes:
  - type: mcp
    namespace: sales-enrichment
    port: 8080
    tools:
    - name: enrich-salesforce-leads
      description: Given a Salesforce lead creation date range, fetch new leads, look up company data from LinkedIn, update lead records in Salesforce with enriched data, and post a summary to the Sales Teams channel.
      inputParameters:
      - name: created_after
        in: body
        type: string
        description: ISO 8601 date string; only leads created after this date will be enriched.
      - name: limit
        in: body
        type: integer
        description: Maximum number of leads to process in this batch. Default is 50.
      steps:
      - name: get-leads
        type: call
        call: salesforce-leads.list-leads
        with:
          created_after: '{{created_after}}'
          limit: '{{limit}}'
      - name: enrich-company
        type: call
        call: linkedin-enrich.search-companies
        with:
          company_names: '{{get-leads.company_names}}'
      - name: update-leads
        type: call
        call: salesforce-leads.update-lead
        with:
          lead_ids: '{{get-leads.ids}}'
          enrichment_data: '{{enrich-company.results}}'
      - name: notify-sales
        type: call
        call: msteams-sales.post-channel-message
        with:
          channel_id: Sales
          text: Enriched {{get-leads.count}} leads with LinkedIn company data. Updated in Salesforce.
  consumes:
  - type: http
    namespace: salesforce-leads
    baseUri: https://microsoft.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      inputParameters:
      - name: created_after
        in: query
      - name: limit
        in: query
      operations:
      - name: list-leads
        method: GET
      - name: update-lead
        method: PATCH
  - type: http
    namespace: linkedin-enrich
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_token
    resources:
    - name: companies
      path: /organizations
      inputParameters:
      - name: company_names
        in: query
      operations:
      - name: search-companies
        method: GET
  - type: http
    namespace: msteams-sales
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → salesforce-lead-enrichment-and-sync.yml

Fetches completed sprint data from Jira Software, calculates velocity metrics, and posts a weekly sprint digest to the Engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Jira Sprint Velocity Digest
  description: Fetches completed sprint data from Jira Software, calculates velocity metrics, and posts a weekly sprint digest to the Engineering Microsoft Teams channel.
  tags:
  - devops
  - engineering
  - jira
  - microsoft-teams
  - agile
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: agile-reporting
    port: 8080
    tools:
    - name: digest-sprint-velocity
      description: Given a Jira board ID and number of completed sprints to analyze, calculate average velocity and post a digest to the Engineering Teams channel.
      inputParameters:
      - name: board_id
        in: body
        type: string
        description: Jira Software board ID to pull sprint data from.
      - name: sprint_count
        in: body
        type: integer
        description: Number of recent completed sprints to include in the velocity calculation.
      steps:
      - name: get-sprints
        type: call
        call: jira-agile.list-completed-sprints
        with:
          board_id: '{{board_id}}'
          limit: '{{sprint_count}}'
      - name: post-digest
        type: call
        call: msteams-eng.post-channel-message
        with:
          channel_id: Engineering
          text: 'Sprint velocity digest for board {{board_id}}: {{get-sprints.average_velocity}} avg story points over {{sprint_count}} sprints. Last sprint: {{get-sprints.last_sprint_name}}'
  consumes:
  - type: http
    namespace: jira-agile
    baseUri: https://microsoft.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: board-sprints
      path: /board/{{board_id}}/sprint
      inputParameters:
      - name: board_id
        in: path
      - name: limit
        in: query
      operations:
      - name: list-completed-sprints
        method: GET
  - 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/{{channel_id}}/channels/General/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

Fetches a document from SharePoint, sends it to the OpenAI API for summarization, and posts the summary to a Microsoft Teams channel thread.

naftiko: '0.5'
info:
  label: OpenAI Document Summarization
  description: Fetches a document from SharePoint, sends it to the OpenAI API for summarization, and posts the summary to a Microsoft Teams channel thread.
  tags:
  - ai
  - automation
  - openai
  - sharepoint
  - microsoft-teams
  - document-intelligence
capability:
  exposes:
  - type: mcp
    namespace: ai-docs
    port: 8080
    tools:
    - name: summarize-sharepoint-document
      description: Given a SharePoint site ID and document item ID, fetch the document content, summarize it with OpenAI GPT-4, and post the summary to a specified Teams channel.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID where the document is stored.
      - name: item_id
        in: body
        type: string
        description: The SharePoint drive item ID of the document to summarize.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID where the summary should be posted.
      steps:
      - name: fetch-document
        type: call
        call: sharepoint-docs.get-drive-item-content
        with:
          site_id: '{{site_id}}'
          item_id: '{{item_id}}'
      - name: summarize
        type: call
        call: openai.create-chat-completion
        with:
          model: gpt-4o
          content: 'Summarize this document concisely: {{fetch-document.text_content}}'
      - name: post-summary
        type: call
        call: msteams-docs.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Document Summary: {{summarize.choices_0_message_content}}'
  consumes:
  - type: http
    namespace: sharepoint-docs
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-item-content
      path: /sites/{{site_id}}/drive/items/{{item_id}}/content
      inputParameters:
      - name: site_id
        in: path
      - name: item_id
        in: path
      operations:
      - name: get-drive-item-content
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_api_key
    resources:
    - name: chat-completions
      path: /chat/completions
      operations:
      - name: create-chat-completion
        method: POST
  - type: http
    namespace: msteams-docs
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → openai-document-summarization.yml

Scans Microsoft Purview for newly classified sensitive data assets, generates a summary report, and sends it to the data governance team via Teams and email.

naftiko: '0.5'
info:
  label: Azure Purview Data Classification Reporter
  description: Scans Microsoft Purview for newly classified sensitive data assets, generates a summary report, and sends it to the data governance team via Teams and email.
  tags:
  - governance
  - data
  - azure
  - purview
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: purview-report
    port: 8080
    tools:
    - name: report-classifications
      description: Fetch new Purview data classifications and notify the governance team.
      inputParameters:
      - name: account_name
        in: body
        type: string
        description: Microsoft Purview account name.
      steps:
      - name: get-classifications
        type: call
        call: purview-api.search-assets
        with:
          account_name: '{{account_name}}'
      - name: notify-teams
        type: call
        call: msteams-governance.post-channel-message
        with:
          channel_id: DataGovernance
          text: 'Purview classification report for {{account_name}}: {{get-classifications.new_classified_count}} new sensitive assets detected.'
      - name: email-report
        type: call
        call: graph-mail-purview.send-mail
        with:
          sender_id: data-governance@microsoft.com
          subject: Purview Data Classification Report — {{account_name}}
          body: 'New sensitive assets: {{get-classifications.new_classified_count}}. Top classifications: {{get-classifications.top_labels}}'
  consumes:
  - type: http
    namespace: purview-api
    baseUri: https://{{account_name}}.purview.azure.com
    authentication:
      type: bearer
      token: $secrets.purview_token
    resources:
    - name: search
      path: /catalog/api/search/query
      operations:
      - name: search-assets
        method: POST
  - type: http
    namespace: msteams-governance
    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: post-channel-message
        method: POST
  - type: http
    namespace: graph-mail-purview
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → azure-purview-data-classification-reporter.yml

Uploads a file to a specified Azure Blob Storage container, returning the blob URI for downstream consumption.

naftiko: '0.5'
info:
  label: Azure Blob Storage Upload
  description: Uploads a file to a specified Azure Blob Storage container, returning the blob URI for downstream consumption.
  tags:
  - cloud
  - storage
  - azure
  - azure-storage
capability:
  exposes:
  - type: mcp
    namespace: blob-upload
    port: 8080
    tools:
    - name: upload-blob
      description: Upload a file to an Azure Blob Storage container given the storage account, container name, and blob name.
      inputParameters:
      - name: account_name
        in: body
        type: string
        description: Azure storage account name.
      - name: container_name
        in: body
        type: string
        description: Target blob container name.
      - name: blob_name
        in: body
        type: string
        description: Name for the uploaded blob.
  consumes:
  - type: http
    namespace: azure-blob
    baseUri: https://{{account_name}}.blob.core.windows.net
    authentication:
      type: bearer
      token: $secrets.azure_storage_token
    resources:
    - name: blobs
      path: /{{container_name}}/{{blob_name}}
      inputParameters:
      - name: container_name
        in: path
      - name: blob_name
        in: path
      operations:
      - name: put-blob
        method: PUT
Open in Framework → View in Fleet → azure-blob-storage-upload.yml

When a GitHub Actions deployment workflow completes, records the deployment in Azure DevOps release tracking, updates the deployment dashboard in Power BI, and notifies the team on Teams.

naftiko: '0.5'
info:
  label: GitHub Actions Deployment Tracker
  description: When a GitHub Actions deployment workflow completes, records the deployment in Azure DevOps release tracking, updates the deployment dashboard in Power BI, and notifies the team on Teams.
  tags:
  - devops
  - ci-cd
  - github-actions
  - azure-devops
  - power-bi
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: deploy-tracker
    port: 8080
    tools:
    - name: track-deployment
      description: Record a GitHub Actions deployment in ADO, update Power BI dashboard, and notify the team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: run_id
        in: body
        type: string
        description: GitHub Actions workflow run ID.
      - name: environment
        in: body
        type: string
        description: Deployment environment (staging, production).
      steps:
      - name: get-workflow-run
        type: call
        call: github-actions.get-run
        with:
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: push-to-powerbi
        type: call
        call: powerbi-deploy.push-rows
        with:
          dataset_id: deployment-tracker
          rows: '{{get-workflow-run.summary}}'
      - name: notify-team
        type: call
        call: msteams-deploy.post-channel-message
        with:
          channel_id: Deployments
          text: 'Deployment to {{environment}} complete for {{repo}}. Status: {{get-workflow-run.conclusion}}. Duration: {{get-workflow-run.duration_seconds}}s'
  consumes:
  - type: http
    namespace: github-actions
    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-run
        method: GET
  - type: http
    namespace: powerbi-deploy
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-rows
      path: /datasets/{{dataset_id}}/tables/Deployments/rows
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: push-rows
        method: POST
  - type: http
    namespace: msteams-deploy
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-actions-deployment-tracker.yml

Monitors Azure API Management for APIs approaching rate limits, notifies the API team on Teams, and creates an Azure DevOps task to review throttling policies.

naftiko: '0.5'
info:
  label: Azure API Management Rate Limit Alert
  description: Monitors Azure API Management for APIs approaching rate limits, notifies the API team on Teams, and creates an Azure DevOps task to review throttling policies.
  tags:
  - api-management
  - azure
  - monitoring
  - microsoft-teams
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: apim-ratelimit
    port: 8080
    tools:
    - name: handle-rate-limit-warning
      description: Detect APIs nearing rate limits in Azure API Management, alert the API team, and create a review task.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: apim_name
        in: body
        type: string
        description: API Management service name.
      steps:
      - name: get-analytics
        type: call
        call: apim-api.get-analytics
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          apim_name: '{{apim_name}}'
      - name: alert-team
        type: call
        call: msteams-api.post-channel-message
        with:
          channel_id: APITeam
          text: 'Rate limit warning for APIM {{apim_name}}: {{get-analytics.top_api}} at {{get-analytics.utilization}}% of quota.'
      - name: create-task
        type: call
        call: ado-api-team.create-item
        with:
          title: Review rate limits for {{get-analytics.top_api}} in {{apim_name}}
          work_item_type: Task
  consumes:
  - type: http
    namespace: apim-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: analytics
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.ApiManagement/service/{{apim_name}}/reports/byApi
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: apim_name
        in: path
      operations:
      - name: get-analytics
        method: GET
  - type: http
    namespace: msteams-api
    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: post-channel-message
        method: POST
  - type: http
    namespace: ado-api-team
    baseUri: https://dev.azure.com/$secrets.ado_org/APITeam/_apis/wit
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: work-items
      path: /workitems/$Task
      operations:
      - name: create-item
        method: POST
Open in Framework → View in Fleet → azure-api-management-rate-limit-alert.yml

Queries GitHub Security Advisory alerts for a repository, prioritizes critical vulnerabilities, creates Jira tickets for each, and posts a digest to the Security Teams channel.

naftiko: '0.5'
info:
  label: GitHub Repository Security Advisory Triage
  description: Queries GitHub Security Advisory alerts for a repository, prioritizes critical vulnerabilities, creates Jira tickets for each, and posts a digest to the Security Teams channel.
  tags:
  - security
  - devops
  - github
  - jira
  - microsoft-teams
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-triage
    port: 8080
    tools:
    - name: triage-security-advisories
      description: Given a GitHub organization and severity filter, list open security advisories, create a Jira ticket for each critical advisory, and post a triage digest to the Security Teams channel.
      inputParameters:
      - name: github_org
        in: body
        type: string
        description: GitHub organization name to scan for security advisories.
      - name: severity
        in: body
        type: string
        description: 'Minimum severity level to triage: ''low'', ''medium'', ''high'', or ''critical''.'
      steps:
      - name: list-advisories
        type: call
        call: github-security.list-org-advisories
        with:
          org: '{{github_org}}'
          severity: '{{severity}}'
      - name: create-jira-tickets
        type: call
        call: jira-sec.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Security advisory triage: {{github_org}} — {{list-advisories.advisory_count}} advisories'
          description: 'Advisories: {{list-advisories.advisory_ids}}

            Severity filter: {{severity}}'
      - name: post-digest
        type: call
        call: msteams-security.post-channel-message
        with:
          channel_id: Security
          text: 'Security advisory triage for {{github_org}}: {{list-advisories.advisory_count}} advisories found at {{severity}}+ severity. Jira: {{create-jira-tickets.key}}'
  consumes:
  - type: http
    namespace: github-security
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-advisories
      path: /orgs/{{org}}/security-advisories
      inputParameters:
      - name: org
        in: path
      - name: severity
        in: query
      operations:
      - name: list-org-advisories
        method: GET
  - type: http
    namespace: jira-sec
    baseUri: https://microsoft.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-security
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → github-repository-security-advisory-triage.yml

When a P1 ServiceNow incident is created, queries Datadog for correlated monitors in alert state, enriches the incident description, and posts the full context to Microsoft Teams on-call channel.

naftiko: '0.5'
info:
  label: ServiceNow Incident to Datadog Correlation
  description: When a P1 ServiceNow incident is created, queries Datadog for correlated monitors in alert state, enriches the incident description, and posts the full context to Microsoft Teams on-call channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - datadog
  - microsoft-teams
  - observability
capability:
  exposes:
  - type: mcp
    namespace: itsm-ops
    port: 8080
    tools:
    - name: enrich-p1-incident
      description: Given a ServiceNow P1 incident number, fetch correlated Datadog monitors in ALERT state, update the incident description with monitor links, and post the full context to the on-call Teams channel.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number, e.g. INC0012345.
      - name: affected_service
        in: body
        type: string
        description: Service name tag to query in Datadog monitors.
      steps:
      - name: get-incident
        type: call
        call: servicenow-p1.get-incident
        with:
          number: '{{incident_number}}'
      - name: get-monitors
        type: call
        call: datadog-monitors.list-monitors
        with:
          tag_filter: service:{{affected_service}}
          monitor_status: Alert
      - name: update-incident
        type: call
        call: servicenow-p1.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          description: '{{get-incident.description}}


            Correlated Datadog monitors in ALERT: {{get-monitors.monitor_names}}'
      - name: notify-oncall
        type: call
        call: msteams-oncall.post-channel-message
        with:
          channel_id: OnCall
          text: 'P1 Incident {{incident_number}} — Service: {{affected_service}} | {{get-monitors.alert_count}} Datadog monitors in ALERT'
  consumes:
  - type: http
    namespace: servicenow-p1
    baseUri: https://microsoft.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: get-incident
        method: GET
      - name: update-incident
        method: PATCH
  - type: http
    namespace: datadog-monitors
    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
      inputParameters:
      - name: tag_filter
        in: query
      - name: monitor_status
        in: query
      operations:
      - name: list-monitors
        method: GET
  - type: http
    namespace: msteams-oncall
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-to-datadog-correlation.yml

Creates a new GitHub repository in a specified organization with configurable visibility and initialization options.

naftiko: '0.5'
info:
  label: GitHub Repository Creator
  description: Creates a new GitHub repository in a specified organization with configurable visibility and initialization options.
  tags:
  - devops
  - github
  - source-control
capability:
  exposes:
  - type: mcp
    namespace: gh-repos
    port: 8080
    tools:
    - name: create-repository
      description: Create a new GitHub repository in the given organization.
      inputParameters:
      - name: org
        in: body
        type: string
        description: GitHub organization name.
      - name: repo_name
        in: body
        type: string
        description: Name for the new repository.
      - name: visibility
        in: body
        type: string
        description: 'Repository visibility: public or private.'
  consumes:
  - type: http
    namespace: github-repos
    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
      operations:
      - name: create-repo
        method: POST
Open in Framework → View in Fleet → github-repository-creator.yml

Fetches failed Logic App run actions, retries the failed run, and posts the retry result to the integration team's Teams channel.

naftiko: '0.5'
info:
  label: Azure Logic App Error Replay
  description: Fetches failed Logic App run actions, retries the failed run, and posts the retry result to the integration team's Teams channel.
  tags:
  - integration
  - automation
  - azure
  - microsoft-teams
  - error-handling
capability:
  exposes:
  - type: mcp
    namespace: logicapp-retry
    port: 8080
    tools:
    - name: retry-failed-run
      description: Fetch details of a failed Logic App run, trigger a retry, and notify the integration team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: logic_app_name
        in: body
        type: string
        description: Logic App name.
      - name: run_id
        in: body
        type: string
        description: Failed run ID.
      steps:
      - name: get-run
        type: call
        call: logicapp-api.get-run
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          logic_app_name: '{{logic_app_name}}'
          run_id: '{{run_id}}'
      - name: trigger-resubmit
        type: call
        call: logicapp-api.resubmit-run
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          logic_app_name: '{{logic_app_name}}'
          run_id: '{{run_id}}'
      - name: notify-team
        type: call
        call: msteams-integration.post-channel-message
        with:
          channel_id: Integration
          text: 'Logic App {{logic_app_name}} run {{run_id}} retried. Original error: {{get-run.error_code}}. Retry status: {{trigger-resubmit.status}}.'
  consumes:
  - type: http
    namespace: logicapp-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: runs
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Logic/workflows/{{logic_app_name}}/runs/{{run_id}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: logic_app_name
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
      - name: resubmit-run
        method: POST
  - type: http
    namespace: msteams-integration
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-logic-app-error-replay.yml

Scans Azure resources for missing mandatory tags, applies default tags where possible, and reports non-compliant resources to the governance team via Teams and a SharePoint list.

naftiko: '0.5'
info:
  label: Azure Resource Tag Compliance Enforcer
  description: Scans Azure resources for missing mandatory tags, applies default tags where possible, and reports non-compliant resources to the governance team via Teams and a SharePoint list.
  tags:
  - governance
  - azure
  - compliance
  - microsoft-teams
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: tag-compliance
    port: 8080
    tools:
    - name: enforce-tags
      description: Scan resources for missing tags, apply defaults, and report to the governance team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      steps:
      - name: get-resources
        type: call
        call: azure-resources.list-resources
        with:
          subscription_id: '{{subscription_id}}'
      - name: notify-governance
        type: call
        call: msteams-governance-tags.post-channel-message
        with:
          channel_id: CloudGovernance
          text: 'Tag compliance scan for subscription {{subscription_id}}: {{get-resources.non_compliant_count}} resources missing mandatory tags.'
      - name: log-to-sharepoint
        type: call
        call: graph-sp-tags.create-list-item
        with:
          site_id: governance-hub
          list_id: tag-compliance-log
  consumes:
  - type: http
    namespace: azure-resources
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: resources
      path: /subscriptions/{{subscription_id}}/resources
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: list-resources
        method: GET
  - type: http
    namespace: msteams-governance-tags
    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: post-channel-message
        method: POST
  - type: http
    namespace: graph-sp-tags
    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-resource-tag-compliance-enforcer.yml

Queries Jira for backlog items older than 30 days with no recent updates, generates a grooming digest, and posts it to the Engineering Microsoft Teams channel to prompt sprint planning action.

naftiko: '0.5'
info:
  label: Jira Backlog Grooming Digest
  description: Queries Jira for backlog items older than 30 days with no recent updates, generates a grooming digest, and posts it to the Engineering Microsoft Teams channel to prompt sprint planning action.
  tags:
  - devops
  - agile
  - jira
  - microsoft-teams
  - backlog
  - sprint-planning
capability:
  exposes:
  - type: mcp
    namespace: agile-grooming
    port: 8080
    tools:
    - name: digest-stale-backlog
      description: Given a Jira project key and staleness threshold in days, list backlog issues not updated within the threshold, and post a grooming digest to the Engineering Teams channel.
      inputParameters:
      - name: project_key
        in: body
        type: string
        description: Jira project key to query the backlog for, e.g. ENG.
      - name: stale_days
        in: body
        type: integer
        description: Number of days without an update to flag an issue as stale. Default is 30.
      steps:
      - name: get-stale-issues
        type: call
        call: jira-backlog.search-issues
        with:
          project: '{{project_key}}'
          status: Backlog
          updated_before_days: '{{stale_days}}'
      - name: post-digest
        type: call
        call: msteams-grooming.post-channel-message
        with:
          channel_id: Engineering
          text: 'Backlog grooming: {{get-stale-issues.count}} issues in {{project_key}} not updated in {{stale_days}}+ days. Top items: {{get-stale-issues.summary_list}}'
  consumes:
  - type: http
    namespace: jira-backlog
    baseUri: https://microsoft.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /search
      inputParameters:
      - name: project
        in: query
      - name: status
        in: query
      - name: updated_before_days
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: msteams-grooming
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → jira-backlog-grooming-digest.yml

Creates and starts an Azure Container Instance in a specified resource group with a given container image.

naftiko: '0.5'
info:
  label: Azure Container Instance Launcher
  description: Creates and starts an Azure Container Instance in a specified resource group with a given container image.
  tags:
  - cloud
  - containers
  - azure
  - compute
capability:
  exposes:
  - type: mcp
    namespace: aci-launcher
    port: 8080
    tools:
    - name: launch-container
      description: Launch an Azure Container Instance with a specified image in a resource group.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: container_group_name
        in: body
        type: string
        description: Name for the container group.
      - name: image
        in: body
        type: string
        description: Container image URI.
  consumes:
  - type: http
    namespace: azure-aci
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: container-groups
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.ContainerInstance/containerGroups/{{container_group_name}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: container_group_name
        in: path
      operations:
      - name: create-container-group
        method: PUT
Open in Framework → View in Fleet → azure-container-instance-launcher.yml

When a document is uploaded to a SharePoint library, sends an approval request via Teams adaptive card, and upon approval updates the document metadata and notifies the uploader via Outlook.

naftiko: '0.5'
info:
  label: SharePoint Document Approval Workflow
  description: When a document is uploaded to a SharePoint library, sends an approval request via Teams adaptive card, and upon approval updates the document metadata and notifies the uploader via Outlook.
  tags:
  - collaboration
  - sharepoint
  - microsoft-teams
  - microsoft-outlook
  - workflow
capability:
  exposes:
  - type: mcp
    namespace: doc-approval
    port: 8080
    tools:
    - name: request-approval
      description: Initiate a document approval by notifying the approver on Teams and updating SharePoint metadata on completion.
      inputParameters:
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID.
      - name: item_id
        in: body
        type: string
        description: Document item ID.
      - name: approver_email
        in: body
        type: string
        description: Approver's email address.
      steps:
      - name: get-document
        type: call
        call: graph-sp-docs.get-item
        with:
          site_id: '{{site_id}}'
          item_id: '{{item_id}}'
      - name: send-approval
        type: call
        call: msteams-approval.post-channel-message
        with:
          channel_id: Approvals
          text: 'Document approval requested: {{get-document.name}} — please review. Approver: {{approver_email}}'
      - name: email-uploader
        type: call
        call: graph-mail-approval.send-mail
        with:
          sender_id: approvals@microsoft.com
          subject: Approval requested for {{get-document.name}}
          body: Your document {{get-document.name}} has been sent for approval to {{approver_email}}.
  consumes:
  - type: http
    namespace: graph-sp-docs
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: items
      path: /sites/{{site_id}}/drive/items/{{item_id}}
      inputParameters:
      - name: site_id
        in: path
      - name: item_id
        in: path
      operations:
      - name: get-item
        method: GET
  - type: http
    namespace: msteams-approval
    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: post-channel-message
        method: POST
  - type: http
    namespace: graph-mail-approval
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → sharepoint-document-approval-workflow.yml

Creates or updates a DNS record set in an Azure DNS zone for automated infrastructure provisioning.

naftiko: '0.5'
info:
  label: Azure DNS Record Updater
  description: Creates or updates a DNS record set in an Azure DNS zone for automated infrastructure provisioning.
  tags:
  - infrastructure
  - networking
  - azure
  - dns
capability:
  exposes:
  - type: mcp
    namespace: azure-dns
    port: 8080
    tools:
    - name: upsert-dns-record
      description: Create or update a DNS record in an Azure DNS zone.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group containing the DNS zone.
      - name: zone_name
        in: body
        type: string
        description: DNS zone name.
      - name: record_name
        in: body
        type: string
        description: DNS record name.
      - name: record_type
        in: body
        type: string
        description: DNS record type such as A, CNAME, or TXT.
  consumes:
  - type: http
    namespace: azure-dns-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: record-sets
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Network/dnsZones/{{zone_name}}/{{record_type}}/{{record_name}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: zone_name
        in: path
      - name: record_type
        in: path
      - name: record_name
        in: path
      operations:
      - name: create-or-update
        method: PUT
Open in Framework → View in Fleet → azure-dns-record-updater.yml

When a VM scale set triggers an autoscale event, captures the scaling metrics from Azure Monitor, posts a summary to Teams, and creates a tracking work item in Azure DevOps.

naftiko: '0.5'
info:
  label: Azure VM Scale Set Autoscale Alert
  description: When a VM scale set triggers an autoscale event, captures the scaling metrics from Azure Monitor, posts a summary to Teams, and creates a tracking work item in Azure DevOps.
  tags:
  - cloud
  - compute
  - azure
  - monitoring
  - microsoft-teams
  - azure-devops
capability:
  exposes:
  - type: mcp
    namespace: vmss-autoscale
    port: 8080
    tools:
    - name: handle-autoscale-event
      description: Process an Azure VM Scale Set autoscale event by fetching metrics, alerting Teams, and logging a work item in Azure DevOps.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group containing the VMSS.
      - name: vmss_name
        in: body
        type: string
        description: VM scale set name.
      steps:
      - name: get-metrics
        type: call
        call: azure-monitor.get-vmss-metrics
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          vmss_name: '{{vmss_name}}'
      - name: notify-teams
        type: call
        call: msteams-infra.post-channel-message
        with:
          channel_id: InfraOps
          text: 'Autoscale event on VMSS {{vmss_name}}: current instances {{get-metrics.instance_count}}, CPU {{get-metrics.avg_cpu}}%'
      - name: create-work-item
        type: call
        call: ado-infra.create-item
        with:
          title: 'Autoscale event: {{vmss_name}} scaled to {{get-metrics.instance_count}} instances'
          work_item_type: Task
  consumes:
  - type: http
    namespace: azure-monitor
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: vmss-metrics
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Compute/virtualMachineScaleSets/{{vmss_name}}/providers/Microsoft.Insights/metrics
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: vmss_name
        in: path
      operations:
      - name: get-vmss-metrics
        method: GET
  - type: http
    namespace: msteams-infra
    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: post-channel-message
        method: POST
  - type: http
    namespace: ado-infra
    baseUri: https://dev.azure.com/$secrets.ado_org/InfraOps/_apis/wit
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: work-items
      path: /workitems/$Task
      operations:
      - name: create-item
        method: POST
Open in Framework → View in Fleet → azure-vm-scale-set-autoscale-alert.yml

Creates a task in Microsoft Planner via the Graph API, assigning it to a plan and bucket.

naftiko: '0.5'
info:
  label: Planner Task Creator
  description: Creates a task in Microsoft Planner via the Graph API, assigning it to a plan and bucket.
  tags:
  - project-management
  - planner
  - microsoft-graph
  - collaboration
capability:
  exposes:
  - type: mcp
    namespace: planner-tasks
    port: 8080
    tools:
    - name: create-task
      description: Create a task in Microsoft Planner for a specified plan and bucket.
      inputParameters:
      - name: plan_id
        in: body
        type: string
        description: Planner plan ID.
      - name: bucket_id
        in: body
        type: string
        description: Planner bucket ID.
      - name: title
        in: body
        type: string
        description: Task title.
  consumes:
  - type: http
    namespace: graph-planner
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: tasks
      path: /planner/tasks
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → planner-task-creator.yml

Monitors Azure Databricks job runs for failures, creates a Jira ticket with job details, and posts an alert to the Data Engineering Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Azure Databricks Job Failure Alert
  description: Monitors Azure Databricks job runs for failures, creates a Jira ticket with job details, and posts an alert to the Data Engineering Microsoft Teams channel.
  tags:
  - data
  - engineering
  - azure-databricks
  - jira
  - microsoft-teams
  - pipeline-monitoring
capability:
  exposes:
  - type: mcp
    namespace: databricks-ops
    port: 8080
    tools:
    - name: handle-databricks-job-failure
      description: Given an Azure Databricks workspace URL and failed job run ID, fetch job run details, create a Jira bug in the DATA project, and alert the Data Engineering Teams channel.
      inputParameters:
      - name: workspace_url
        in: body
        type: string
        description: Azure Databricks workspace URL, e.g. adb-1234567890.12.azuredatabricks.net.
      - name: run_id
        in: body
        type: string
        description: The Databricks job run ID that failed.
      - name: job_name
        in: body
        type: string
        description: Human-readable name of the Databricks job.
      steps:
      - name: get-run-details
        type: call
        call: databricks.get-run
        with:
          run_id: '{{run_id}}'
      - name: create-jira-bug
        type: call
        call: jira-data-eng.create-issue
        with:
          project_key: DATA
          issuetype: Bug
          summary: '[Databricks] Job failure: {{job_name}} (Run {{run_id}})'
          description: 'State: {{get-run-details.state}}

            Error: {{get-run-details.error_message}}

            Workspace: {{workspace_url}}'
      - name: alert-teams
        type: call
        call: msteams-dataeng.post-channel-message
        with:
          channel_id: DataEngineering
          text: 'Databricks job failure: {{job_name}} | Run: {{run_id}} | Jira: {{create-jira-bug.key}}'
  consumes:
  - type: http
    namespace: databricks
    baseUri: https://{{workspace_url}}/api/2.1
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: job-runs
      path: /jobs/runs/get
      inputParameters:
      - name: run_id
        in: query
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: jira-data-eng
    baseUri: https://microsoft.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-dataeng
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-databricks-job-failure-alert.yml

When Entra ID Protection detects a risky sign-in, fetches the risk details, forces a password reset, and notifies the user and SOC team via email and Teams.

naftiko: '0.5'
info:
  label: Entra Sign-In Risk Responder
  description: When Entra ID Protection detects a risky sign-in, fetches the risk details, forces a password reset, and notifies the user and SOC team via email and Teams.
  tags:
  - security
  - identity
  - entra
  - microsoft-teams
  - microsoft-outlook
capability:
  exposes:
  - type: mcp
    namespace: signin-risk
    port: 8080
    tools:
    - name: respond-to-risky-signin
      description: Fetch risky sign-in details, force password reset, and notify the user and SOC.
      inputParameters:
      - name: risk_detection_id
        in: body
        type: string
        description: Entra ID risk detection ID.
      steps:
      - name: get-risk
        type: call
        call: graph-risk.get-risk-detection
        with:
          risk_detection_id: '{{risk_detection_id}}'
      - name: notify-soc
        type: call
        call: msteams-soc-risk.post-channel-message
        with:
          channel_id: SOC
          text: 'Risky sign-in detected for {{get-risk.user_display_name}} from {{get-risk.ip_address}} ({{get-risk.location}}). Risk level: {{get-risk.risk_level}}. Password reset initiated.'
      - name: email-user
        type: call
        call: graph-mail-risk.send-mail
        with:
          sender_id: security@microsoft.com
          subject: Security Alert — Suspicious Sign-In Detected
          body: A suspicious sign-in was detected on your account from {{get-risk.ip_address}}. Your password has been reset as a precaution. Please contact IT if this was you.
  consumes:
  - type: http
    namespace: graph-risk
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: risk-detections
      path: /identityProtection/riskDetections/{{risk_detection_id}}
      inputParameters:
      - name: risk_detection_id
        in: path
      operations:
      - name: get-risk-detection
        method: GET
  - type: http
    namespace: msteams-soc-risk
    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: post-channel-message
        method: POST
  - type: http
    namespace: graph-mail-risk
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → entra-sign-in-risk-responder.yml

Executes a search query against an Azure AI Search index and returns matching documents.

naftiko: '0.5'
info:
  label: Azure Cognitive Search Query
  description: Executes a search query against an Azure AI Search index and returns matching documents.
  tags:
  - search
  - ai
  - azure
  - data
capability:
  exposes:
  - type: mcp
    namespace: ai-search
    port: 8080
    tools:
    - name: search-documents
      description: Search an Azure AI Search index with a query string.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Azure AI Search service name.
      - name: index_name
        in: body
        type: string
        description: Index name to search.
      - name: query
        in: body
        type: string
        description: Search query text.
  consumes:
  - type: http
    namespace: azure-search
    baseUri: https://{{service_name}}.search.windows.net
    authentication:
      type: apiKey
      name: api-key
      value: $secrets.azure_search_key
    resources:
    - name: search
      path: /indexes/{{index_name}}/docs/search
      inputParameters:
      - name: index_name
        in: path
      operations:
      - name: query-index
        method: POST
Open in Framework → View in Fleet → azure-cognitive-search-query.yml

When a GitHub issue is labeled for tracking, creates a corresponding work item in Azure DevOps and posts a link back as a GitHub comment.

naftiko: '0.5'
info:
  label: GitHub Issue to Azure DevOps Sync
  description: When a GitHub issue is labeled for tracking, creates a corresponding work item in Azure DevOps and posts a link back as a GitHub comment.
  tags:
  - devops
  - github
  - azure-devops
  - project-management
  - integration
capability:
  exposes:
  - type: mcp
    namespace: issue-sync
    port: 8080
    tools:
    - name: sync-issue-to-ado
      description: Sync a GitHub issue to Azure DevOps as a work item and comment back with the link.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: issue_number
        in: body
        type: integer
        description: GitHub issue number.
      - name: ado_project
        in: body
        type: string
        description: Azure DevOps project name.
      steps:
      - name: get-issue
        type: call
        call: github-issues.get-issue
        with:
          repo: '{{repo}}'
          issue_number: '{{issue_number}}'
      - name: create-work-item
        type: call
        call: ado-sync.create-item
        with:
          title: '{{get-issue.title}}'
          work_item_type: User Story
          description: 'Synced from GitHub issue #{{issue_number}} in {{repo}}'
      - name: comment-back
        type: call
        call: github-comments-sync.create-comment
        with:
          repo: '{{repo}}'
          issue_number: '{{issue_number}}'
          body: 'Tracked in Azure DevOps: {{create-work-item.url}}'
  consumes:
  - type: http
    namespace: github-issues
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/{{repo}}/issues/{{issue_number}}
      inputParameters:
      - name: repo
        in: path
      - name: issue_number
        in: path
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: ado-sync
    baseUri: https://dev.azure.com/$secrets.ado_org/{{ado_project}}/_apis/wit
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: work-items
      path: /workitems/$User Story
      operations:
      - name: create-item
        method: POST
  - type: http
    namespace: github-comments-sync
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: comments
      path: /repos/{{repo}}/issues/{{issue_number}}/comments
      inputParameters:
      - name: repo
        in: path
      - name: issue_number
        in: path
      operations:
      - name: create-comment
        method: POST
Open in Framework → View in Fleet → github-issue-to-azure-devops-sync.yml

Queries Azure AD for users with privileged role assignments, exports the list to a SharePoint audit folder, and posts a review reminder to the Security governance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Azure AD Privileged Access Review
  description: Queries Azure AD for users with privileged role assignments, exports the list to a SharePoint audit folder, and posts a review reminder to the Security governance Microsoft Teams channel.
  tags:
  - security
  - identity
  - azure-ad
  - sharepoint
  - microsoft-teams
  - access-review
  - governance
capability:
  exposes:
  - type: mcp
    namespace: identity-governance
    port: 8080
    tools:
    - name: run-privileged-access-review
      description: Query Azure AD for all users with Global Admin, Security Admin, or Privileged Role Administrator assignments, export the list to SharePoint, and post a review reminder to the Security Teams channel.
      inputParameters:
      - name: role_names
        in: body
        type: string
        description: Comma-separated Azure AD role display names to review, e.g. 'Global Administrator,Security Administrator'.
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID where the audit export should be saved.
      steps:
      - name: get-role-assignments
        type: call
        call: msgraph-governance.list-role-assignments
        with:
          role_names: '{{role_names}}'
      - name: export-to-sharepoint
        type: call
        call: sharepoint-audit.create-file
        with:
          site_id: '{{sharepoint_site_id}}'
          file_name: PrivilegedAccessReview_{{get-role-assignments.snapshot_date}}.csv
          content: '{{get-role-assignments.csv_data}}'
      - name: post-review-reminder
        type: call
        call: msteams-governance.post-channel-message
        with:
          channel_id: Security
          text: 'Privileged access review complete. {{get-role-assignments.user_count}} privileged users found. Report saved to SharePoint: {{export-to-sharepoint.file_url}}'
  consumes:
  - type: http
    namespace: msgraph-governance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: role-assignments
      path: /roleManagement/directory/roleAssignments
      inputParameters:
      - name: role_names
        in: query
      operations:
      - name: list-role-assignments
        method: GET
  - type: http
    namespace: sharepoint-audit
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/root/children
      inputParameters:
      - name: site_id
        in: path
      operations:
      - name: create-file
        method: POST
  - type: http
    namespace: msteams-governance
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-ad-privileged-access-review.yml

Triggers an Azure Databricks notebook run, monitors its status, and posts the result with output metrics to the data science Teams channel.

naftiko: '0.5'
info:
  label: Azure Databricks Notebook Scheduler
  description: Triggers an Azure Databricks notebook run, monitors its status, and posts the result with output metrics to the data science Teams channel.
  tags:
  - data
  - azure-databricks
  - machine-learning
  - microsoft-teams
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: databricks-scheduler
    port: 8080
    tools:
    - name: run-notebook
      description: Trigger a Databricks notebook run, wait for completion, and post results to Teams.
      inputParameters:
      - name: workspace_url
        in: body
        type: string
        description: Databricks workspace URL.
      - name: notebook_path
        in: body
        type: string
        description: Full path to the notebook.
      steps:
      - name: submit-run
        type: call
        call: databricks-api.submit-run
        with:
          workspace_url: '{{workspace_url}}'
          notebook_path: '{{notebook_path}}'
      - name: get-run-status
        type: call
        call: databricks-api.get-run
        with:
          workspace_url: '{{workspace_url}}'
          run_id: '{{submit-run.run_id}}'
      - name: notify-ds-team
        type: call
        call: msteams-datascience.post-channel-message
        with:
          channel_id: DataScience
          text: 'Databricks notebook {{notebook_path}} completed. Status: {{get-run-status.state}}. Duration: {{get-run-status.execution_duration_ms}}ms.'
  consumes:
  - type: http
    namespace: databricks-api
    baseUri: '{{workspace_url}}/api/2.1'
    authentication:
      type: bearer
      token: $secrets.databricks_token
    resources:
    - name: runs-submit
      path: /jobs/runs/submit
      operations:
      - name: submit-run
        method: POST
    - name: runs-get
      path: /jobs/runs/get
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: msteams-datascience
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-databricks-notebook-scheduler.yml

When a Power Automate flow run fails, fetches the run history, identifies the failed action, notifies the flow owner via Outlook, and creates a work item in Azure DevOps.

naftiko: '0.5'
info:
  label: Power Automate Flow Failure Escalation
  description: When a Power Automate flow run fails, fetches the run history, identifies the failed action, notifies the flow owner via Outlook, and creates a work item in Azure DevOps.
  tags:
  - automation
  - power-automate
  - microsoft-outlook
  - azure-devops
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: flow-failure
    port: 8080
    tools:
    - name: escalate-flow-failure
      description: Escalate a Power Automate flow failure by fetching details, emailing the owner, and creating a work item.
      inputParameters:
      - name: environment_id
        in: body
        type: string
        description: Power Platform environment ID.
      - name: flow_id
        in: body
        type: string
        description: Flow ID.
      - name: run_id
        in: body
        type: string
        description: Flow run ID.
      steps:
      - name: get-run
        type: call
        call: flow-api.get-run
        with:
          environment_id: '{{environment_id}}'
          flow_id: '{{flow_id}}'
          run_id: '{{run_id}}'
      - name: email-owner
        type: call
        call: graph-mail-flow.send-mail
        with:
          sender_id: automation-alerts@microsoft.com
          subject: 'Power Automate flow failure: {{flow_id}}'
          body: 'Flow run {{run_id}} failed. Error: {{get-run.error_message}}. Please investigate.'
      - name: create-work-item
        type: call
        call: ado-automation.create-item
        with:
          title: 'Power Automate failure: flow {{flow_id}} run {{run_id}}'
          work_item_type: Bug
  consumes:
  - type: http
    namespace: flow-api
    baseUri: https://api.flow.microsoft.com
    authentication:
      type: bearer
      token: $secrets.flow_token
    resources:
    - name: flow-runs
      path: /providers/Microsoft.ProcessSimple/environments/{{environment_id}}/flows/{{flow_id}}/runs/{{run_id}}
      inputParameters:
      - name: environment_id
        in: path
      - name: flow_id
        in: path
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: graph-mail-flow
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: ado-automation
    baseUri: https://dev.azure.com/$secrets.ado_org/Automation/_apis/wit
    authentication:
      type: bearer
      token: $secrets.azure_devops_token
    resources:
    - name: work-items
      path: /workitems/$Bug
      operations:
      - name: create-item
        method: POST
Open in Framework → View in Fleet → power-automate-flow-failure-escalation.yml

Queries managed device details from Microsoft Intune via the Graph API for compliance reporting.

naftiko: '0.5'
info:
  label: Windows Intune Device Query
  description: Queries managed device details from Microsoft Intune via the Graph API for compliance reporting.
  tags:
  - endpoint-management
  - intune
  - security
  - microsoft-graph
capability:
  exposes:
  - type: mcp
    namespace: intune-devices
    port: 8080
    tools:
    - name: get-device-details
      description: Retrieve device details from Intune by device ID.
      inputParameters:
      - name: device_id
        in: body
        type: string
        description: Intune managed device ID.
  consumes:
  - type: http
    namespace: graph-intune
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: managed-devices
      path: /deviceManagement/managedDevices/{{device_id}}
      inputParameters:
      - name: device_id
        in: path
      operations:
      - name: get-device
        method: GET
Open in Framework → View in Fleet → windows-intune-device-query.yml

After a Teams meeting ends, retrieves the transcript via Graph API, summarizes it using Azure OpenAI, and posts the summary to the meeting chat and a SharePoint document library.

naftiko: '0.5'
info:
  label: Teams Meeting Transcript Summarizer
  description: After a Teams meeting ends, retrieves the transcript via Graph API, summarizes it using Azure OpenAI, and posts the summary to the meeting chat and a SharePoint document library.
  tags:
  - ai
  - collaboration
  - microsoft-teams
  - generative-ai
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: meeting-summary
    port: 8080
    tools:
    - name: summarize-meeting
      description: Retrieve a Teams meeting transcript, summarize it with Azure OpenAI, and post the summary to chat and SharePoint.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: Teams online meeting ID.
      - name: site_id
        in: body
        type: string
        description: SharePoint site ID for storing the summary.
      steps:
      - name: get-transcript
        type: call
        call: graph-meetings.get-transcript
        with:
          meeting_id: '{{meeting_id}}'
      - name: generate-summary
        type: call
        call: azure-openai-sum.create-completion
        with:
          deployment_id: gpt-4o
          prompt: 'Summarize the following meeting transcript into key decisions, action items, and open questions:

            {{get-transcript.content}}'
      - name: post-to-chat
        type: call
        call: graph-meetings.post-chat-message
        with:
          meeting_id: '{{meeting_id}}'
          text: 'Meeting Summary:

            {{generate-summary.response}}'
      - name: save-to-sharepoint
        type: call
        call: graph-sp.upload-file
        with:
          site_id: '{{site_id}}'
          file_name: meeting-summary-{{meeting_id}}.txt
          content: '{{generate-summary.response}}'
  consumes:
  - type: http
    namespace: graph-meetings
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: transcripts
      path: /me/onlineMeetings/{{meeting_id}}/transcripts
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-transcript
        method: GET
    - name: chat-messages
      path: /me/onlineMeetings/{{meeting_id}}/chat/messages
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: post-chat-message
        method: POST
  - type: http
    namespace: azure-openai-sum
    baseUri: https://$secrets.azure_openai_endpoint.openai.azure.com/openai/deployments/{{deployment_id}}
    authentication:
      type: apiKey
      name: api-key
      value: $secrets.azure_openai_key
    resources:
    - name: completions
      path: /chat/completions
      inputParameters:
      - name: deployment_id
        in: path
      operations:
      - name: create-completion
        method: POST
  - type: http
    namespace: graph-sp
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: drive-items
      path: /sites/{{site_id}}/drive/root:/{{file_name}}:/content
      inputParameters:
      - name: site_id
        in: path
      - name: file_name
        in: path
      operations:
      - name: upload-file
        method: PUT
Open in Framework → View in Fleet → teams-meeting-transcript-summarizer.yml

On a new GitHub pull request to a protected branch, triggers an Azure Defender for DevOps scan, posts scan results as a PR comment, and opens a Jira security ticket if critical findings are detected.

naftiko: '0.5'
info:
  label: GitHub Pull Request Security Scan
  description: On a new GitHub pull request to a protected branch, triggers an Azure Defender for DevOps scan, posts scan results as a PR comment, and opens a Jira security ticket if critical findings are detected.
  tags:
  - devops
  - security
  - github
  - azure-defender
  - jira
  - code-review
capability:
  exposes:
  - type: mcp
    namespace: devops-security
    port: 8080
    tools:
    - name: handle-pr-security-scan
      description: Given a GitHub PR number, repo, and head SHA, trigger an Azure Defender scan, post findings as a PR comment, and open a Jira security bug if critical issues are found.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format, e.g. microsoft/vscode.
      - name: pr_number
        in: body
        type: integer
        description: The GitHub pull request number.
      - name: head_sha
        in: body
        type: string
        description: The commit SHA of the PR head to scan.
      steps:
      - name: trigger-scan
        type: call
        call: azure-defender.trigger-scan
        with:
          repository: '{{repo}}'
          commit_sha: '{{head_sha}}'
      - name: post-comment
        type: call
        call: github-pr.create-pr-comment
        with:
          repo: '{{repo}}'
          pr_number: '{{pr_number}}'
          body: 'Security scan complete. Scan ID: {{trigger-scan.scan_id}} | Status: {{trigger-scan.status}} | Findings: {{trigger-scan.critical_count}} critical'
      - name: open-jira-ticket
        type: call
        call: jira-security.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: '[Security] Critical findings in PR #{{pr_number}} — {{repo}}'
          description: 'Scan ID: {{trigger-scan.scan_id}}

            Commit: {{head_sha}}

            Critical issues: {{trigger-scan.critical_count}}'
  consumes:
  - type: http
    namespace: azure-defender
    baseUri: https://management.azure.com/subscriptions
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: devops-scans
      path: /providers/Microsoft.Security/devopsScans
      operations:
      - name: trigger-scan
        method: POST
  - type: http
    namespace: github-pr
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pr-comments
      path: /repos/{{repo}}/issues/{{pr_number}}/comments
      inputParameters:
      - name: repo
        in: path
      - name: pr_number
        in: path
      operations:
      - name: create-pr-comment
        method: POST
  - type: http
    namespace: jira-security
    baseUri: https://microsoft.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-pull-request-security-scan.yml

Fetches open Dependabot vulnerability alerts for a GitHub organization's repositories and creates Jira tickets in the Security project for critical and high severity alerts.

naftiko: '0.5'
info:
  label: GitHub Dependabot Alert to Jira
  description: Fetches open Dependabot vulnerability alerts for a GitHub organization's repositories and creates Jira tickets in the Security project for critical and high severity alerts.
  tags:
  - security
  - devops
  - github
  - jira
  - vulnerability-management
  - dependabot
capability:
  exposes:
  - type: mcp
    namespace: dependency-security
    port: 8080
    tools:
    - name: sync-dependabot-to-jira
      description: Given a GitHub organization name, fetch all open Dependabot alerts at critical or high severity and create a Jira ticket in the SEC project for each unique package vulnerability.
      inputParameters:
      - name: github_org
        in: body
        type: string
        description: GitHub organization to scan for Dependabot alerts.
      - name: min_severity
        in: body
        type: string
        description: 'Minimum severity to sync: ''high'' or ''critical''.'
      steps:
      - name: get-dependabot-alerts
        type: call
        call: github-deps.list-dependabot-alerts
        with:
          org: '{{github_org}}'
          severity: '{{min_severity}}'
      - name: create-jira-issue
        type: call
        call: jira-deps.create-issue
        with:
          project_key: SEC
          issuetype: Bug
          summary: 'Dependabot alerts: {{get-dependabot-alerts.alert_count}} {{min_severity}}+ in {{github_org}}'
          description: 'Affected packages: {{get-dependabot-alerts.package_names}}

            Repositories: {{get-dependabot-alerts.repo_names}}'
  consumes:
  - type: http
    namespace: github-deps
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: dependabot-alerts
      path: /orgs/{{org}}/dependabot/alerts
      inputParameters:
      - name: org
        in: path
      - name: severity
        in: query
      operations:
      - name: list-dependabot-alerts
        method: GET
  - type: http
    namespace: jira-deps
    baseUri: https://microsoft.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → github-dependabot-alert-to-jira.yml

Fetches Windows Update compliance data from Intune, pushes the metrics to a Power BI dataset, and posts a compliance summary to the IT operations Teams channel.

naftiko: '0.5'
info:
  label: Windows Update Compliance Dashboard
  description: Fetches Windows Update compliance data from Intune, pushes the metrics to a Power BI dataset, and posts a compliance summary to the IT operations Teams channel.
  tags:
  - endpoint-management
  - intune
  - windows
  - power-bi
  - microsoft-teams
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: wu-compliance
    port: 8080
    tools:
    - name: sync-update-compliance
      description: Collect Windows Update compliance data from Intune, push to Power BI, and notify IT ops.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: Power BI dataset ID for update compliance.
      steps:
      - name: get-update-status
        type: call
        call: graph-intune-updates.list-update-states
        with: {}
      - name: push-to-powerbi
        type: call
        call: powerbi-updates.push-rows
        with:
          dataset_id: '{{dataset_id}}'
          rows: '{{get-update-status.device_states}}'
      - name: notify-it
        type: call
        call: msteams-itops.post-channel-message
        with:
          channel_id: ITOperations
          text: 'Windows Update compliance sync complete. Up to date: {{get-update-status.compliant_count}}. Pending: {{get-update-status.pending_count}}. Failed: {{get-update-status.failed_count}}.'
  consumes:
  - type: http
    namespace: graph-intune-updates
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: update-states
      path: /deviceManagement/softwareUpdateStatusSummary
      operations:
      - name: list-update-states
        method: GET
  - type: http
    namespace: powerbi-updates
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: dataset-rows
      path: /datasets/{{dataset_id}}/tables/UpdateCompliance/rows
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: push-rows
        method: POST
  - type: http
    namespace: msteams-itops
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → windows-update-compliance-dashboard.yml

Triggers a Terraform Cloud workspace run to provision Azure infrastructure, monitors the run status, and posts the apply summary to a Microsoft Teams DevOps channel.

naftiko: '0.5'
info:
  label: Azure Resource Provisioning via Terraform
  description: Triggers a Terraform Cloud workspace run to provision Azure infrastructure, monitors the run status, and posts the apply summary to a Microsoft Teams DevOps channel.
  tags:
  - cloud
  - infrastructure
  - terraform
  - azure
  - microsoft-teams
  - devops
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-azure-resources
      description: Given a Terraform Cloud workspace ID and a set of variable overrides, trigger a workspace run to provision Azure infrastructure, then post the run outcome to Teams DevOps channel.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID to trigger a run on.
      - name: environment
        in: body
        type: string
        description: Target environment name, e.g. 'staging' or 'production'.
      steps:
      - name: trigger-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          message: Provisioning triggered for {{environment}} by agent
      - name: notify-devops
        type: call
        call: msteams-infra.post-channel-message
        with:
          channel_id: DevOps
          text: 'Terraform run triggered for workspace {{workspace_id}} targeting {{environment}}. Run ID: {{trigger-run.run_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: msteams-infra
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-resource-provisioning-via-terraform.yml

When a GitHub push triggers an Azure Static Web Apps deployment, monitors the deployment status and posts the result with the preview URL to the frontend Teams channel.

naftiko: '0.5'
info:
  label: Azure Static Web App Deploy Notifier
  description: When a GitHub push triggers an Azure Static Web Apps deployment, monitors the deployment status and posts the result with the preview URL to the frontend Teams channel.
  tags:
  - devops
  - web
  - azure
  - github
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: swa-deploy
    port: 8080
    tools:
    - name: track-swa-deployment
      description: Monitor a Static Web App deployment triggered by a GitHub push and notify the frontend team.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: swa_name
        in: body
        type: string
        description: Static Web App name.
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      steps:
      - name: get-deploy-status
        type: call
        call: swa-api.get-builds
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          swa_name: '{{swa_name}}'
      - name: notify-frontend
        type: call
        call: msteams-frontend.post-channel-message
        with:
          channel_id: Frontend
          text: 'Static Web App {{swa_name}} deployment from {{repo}}: {{get-deploy-status.status}}. Preview: {{get-deploy-status.hostname}}'
  consumes:
  - type: http
    namespace: swa-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: builds
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Web/staticSites/{{swa_name}}/builds
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: swa_name
        in: path
      operations:
      - name: get-builds
        method: GET
  - type: http
    namespace: msteams-frontend
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-static-web-app-deploy-notifier.yml

Fetches approved invoices from SAP Concur, validates against Dynamics 365 purchase orders, and posts a matched invoice summary to the Finance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: SAP Concur Invoice Processing
  description: Fetches approved invoices from SAP Concur, validates against Dynamics 365 purchase orders, and posts a matched invoice summary to the Finance Microsoft Teams channel.
  tags:
  - finance
  - erp
  - sap-concur
  - dynamics-365
  - microsoft-teams
  - invoice-processing
capability:
  exposes:
  - type: mcp
    namespace: finance-invoicing
    port: 8080
    tools:
    - name: process-approved-invoices
      description: Fetch approved invoices from SAP Concur, validate each against a Dynamics 365 purchase order, and post a reconciliation summary to the Finance Teams channel.
      inputParameters:
      - name: period_start
        in: body
        type: string
        description: Start of the invoice period in ISO 8601 format.
      - name: period_end
        in: body
        type: string
        description: End of the invoice period in ISO 8601 format.
      steps:
      - name: get-invoices
        type: call
        call: concur-invoices.list-invoices
        with:
          status: Approved
          start_date: '{{period_start}}'
          end_date: '{{period_end}}'
      - name: validate-po
        type: call
        call: dynamics365-po.list-purchase-orders
        with:
          invoice_ids: '{{get-invoices.invoice_ids}}'
      - name: notify-finance
        type: call
        call: msteams-finance.post-channel-message
        with:
          channel_id: Finance
          text: 'Invoice processing complete: {{get-invoices.count}} invoices approved for {{period_start}} to {{period_end}}. PO match rate: {{validate-po.match_rate}}%'
  consumes:
  - type: http
    namespace: concur-invoices
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: invoices
      path: /invoice/paymentrequests
      inputParameters:
      - name: status
        in: query
      - name: start_date
        in: query
      - name: end_date
        in: query
      operations:
      - name: list-invoices
        method: GET
  - type: http
    namespace: dynamics365-po
    baseUri: https://microsoft.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics365_token
    resources:
    - name: purchase-orders
      path: /purchaseorders
      inputParameters:
      - name: invoice_ids
        in: query
      operations:
      - name: list-purchase-orders
        method: GET
  - type: http
    namespace: msteams-finance
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → sap-concur-invoice-processing.yml

Scans Intune-managed devices for compliance policy violations, sends a warning email to the device owner, and logs non-compliant devices to a SharePoint compliance list.

naftiko: '0.5'
info:
  label: Intune Device Compliance Enforcer
  description: Scans Intune-managed devices for compliance policy violations, sends a warning email to the device owner, and logs non-compliant devices to a SharePoint compliance list.
  tags:
  - security
  - endpoint-management
  - intune
  - microsoft-outlook
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: intune-compliance
    port: 8080
    tools:
    - name: enforce-compliance
      description: Scan devices for compliance violations, warn device owners, and log to SharePoint.
      inputParameters:
      - name: policy_id
        in: body
        type: string
        description: Intune compliance policy ID.
      steps:
      - name: get-noncompliant
        type: call
        call: graph-intune-compliance.list-noncompliant
        with:
          policy_id: '{{policy_id}}'
      - name: email-owner
        type: call
        call: graph-mail-intune.send-mail
        with:
          sender_id: intune-compliance@microsoft.com
          subject: Device Compliance Warning
          body: Your device is non-compliant with policy {{policy_id}}. Please remediate within 48 hours or access will be restricted.
      - name: log-to-sharepoint
        type: call
        call: graph-sp-compliance.create-list-item
        with:
          site_id: compliance-site
          list_id: noncompliant-devices
  consumes:
  - type: http
    namespace: graph-intune-compliance
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: device-compliance
      path: /deviceManagement/deviceCompliancePolicies/{{policy_id}}/deviceStatuses
      inputParameters:
      - name: policy_id
        in: path
      operations:
      - name: list-noncompliant
        method: GET
  - type: http
    namespace: graph-mail-intune
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: graph-sp-compliance
    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 → intune-device-compliance-enforcer.yml

When a new Microsoft Sentinel incident is created, fetches the incident details and related alerts, assigns severity-based ownership, and posts triage instructions to the SOC Teams channel.

naftiko: '0.5'
info:
  label: Azure Sentinel Incident Triage
  description: When a new Microsoft Sentinel incident is created, fetches the incident details and related alerts, assigns severity-based ownership, and posts triage instructions to the SOC Teams channel.
  tags:
  - security
  - siem
  - azure
  - sentinel
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: sentinel-triage
    port: 8080
    tools:
    - name: triage-incident
      description: Triage a Sentinel incident by fetching details, assigning an owner, and posting SOC instructions.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group of the Sentinel workspace.
      - name: workspace_name
        in: body
        type: string
        description: Log Analytics workspace name.
      - name: incident_id
        in: body
        type: string
        description: Sentinel incident ID.
      steps:
      - name: get-incident
        type: call
        call: sentinel-api.get-incident
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          workspace_name: '{{workspace_name}}'
          incident_id: '{{incident_id}}'
      - name: update-owner
        type: call
        call: sentinel-api.update-incident
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          workspace_name: '{{workspace_name}}'
          incident_id: '{{incident_id}}'
      - name: notify-soc
        type: call
        call: msteams-soc.post-channel-message
        with:
          channel_id: SOC
          text: 'Sentinel incident {{incident_id}}: {{get-incident.title}} (Severity: {{get-incident.severity}}). Owner assigned. Begin triage per runbook.'
  consumes:
  - type: http
    namespace: sentinel-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: incidents
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.OperationalInsights/workspaces/{{workspace_name}}/providers/Microsoft.SecurityInsights/incidents/{{incident_id}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: workspace_name
        in: path
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
      - name: update-incident
        method: PATCH
  - type: http
    namespace: msteams-soc
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-sentinel-incident-triage.yml

At payroll period close, exports payroll data from Workday, validates totals against Dynamics 365 financial accounts, and posts a reconciliation summary to the Finance Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Workday Payroll Period Close Snapshot
  description: At payroll period close, exports payroll data from Workday, validates totals against Dynamics 365 financial accounts, and posts a reconciliation summary to the Finance Microsoft Teams channel.
  tags:
  - hr
  - finance
  - payroll
  - workday
  - dynamics-365
  - microsoft-teams
  - period-close
capability:
  exposes:
  - type: mcp
    namespace: payroll-close
    port: 8080
    tools:
    - name: close-payroll-period
      description: Given a Workday payroll period ID, export payroll totals, validate against Dynamics 365 GL accounts, and post the reconciliation result to the Finance Teams channel.
      inputParameters:
      - name: payroll_period_id
        in: body
        type: string
        description: Workday payroll period identifier to close and reconcile.
      - name: gl_account_id
        in: body
        type: string
        description: Dynamics 365 General Ledger account ID to validate payroll totals against.
      steps:
      - name: export-payroll
        type: call
        call: workday-payroll.export-payroll-results
        with:
          period_id: '{{payroll_period_id}}'
      - name: validate-gl
        type: call
        call: dynamics365-gl.get-account-balance
        with:
          account_id: '{{gl_account_id}}'
          period: '{{payroll_period_id}}'
      - name: post-reconciliation
        type: call
        call: msteams-payroll.post-channel-message
        with:
          channel_id: Finance
          text: 'Payroll close: Period {{payroll_period_id}} | Payroll total: ${{export-payroll.gross_total}} | GL balance: ${{validate-gl.balance}} | Variance: ${{validate-gl.variance}}'
  consumes:
  - type: http
    namespace: workday-payroll
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: payroll-results
      path: /microsoft/payrollResults/{{period_id}}
      inputParameters:
      - name: period_id
        in: path
      operations:
      - name: export-payroll-results
        method: GET
  - type: http
    namespace: dynamics365-gl
    baseUri: https://microsoft.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.dynamics365_token
    resources:
    - name: accounts
      path: /accounts/{{account_id}}
      inputParameters:
      - name: account_id
        in: path
      - name: period
        in: query
      operations:
      - name: get-account-balance
        method: GET
  - type: http
    namespace: msteams-payroll
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → workday-payroll-period-close-snapshot.yml

Triggers a Power BI dataset refresh on demand and monitors the refresh status, posting the result to a Microsoft Teams data channel when complete.

naftiko: '0.5'
info:
  label: Power BI Report Refresh Trigger
  description: Triggers a Power BI dataset refresh on demand and monitors the refresh status, posting the result to a Microsoft Teams data channel when complete.
  tags:
  - data
  - analytics
  - power-bi
  - microsoft-teams
  - reporting
  - bi
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-powerbi-dataset
      description: Given a Power BI dataset ID, trigger a refresh and post the completion status to the Data Teams channel. Use when stakeholders need up-to-date dashboard data outside the scheduled refresh window.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to refresh.
      - name: notify_channel
        in: body
        type: string
        description: Teams channel ID to post refresh completion status to.
      steps:
      - name: trigger-refresh
        type: call
        call: powerbi-refresh.trigger-dataset-refresh
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-complete
        type: call
        call: msteams-data.post-channel-message
        with:
          channel_id: '{{notify_channel}}'
          text: 'Power BI dataset {{dataset_id}} refresh triggered. Request ID: {{trigger-refresh.request_id}}'
  consumes:
  - type: http
    namespace: powerbi-refresh
    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: trigger-dataset-refresh
        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/{{channel_id}}/channels/General/messages
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → power-bi-report-refresh-trigger.yml

Queries Azure Policy compliance state for a subscription, generates a compliance summary, emails it to stakeholders, and posts highlights to a Teams governance channel.

naftiko: '0.5'
info:
  label: Azure Policy Compliance Reporter
  description: Queries Azure Policy compliance state for a subscription, generates a compliance summary, emails it to stakeholders, and posts highlights to a Teams governance channel.
  tags:
  - governance
  - compliance
  - azure
  - microsoft-outlook
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: policy-compliance
    port: 8080
    tools:
    - name: generate-compliance-report
      description: Generate an Azure Policy compliance report, email it to stakeholders, and post highlights to Teams.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      steps:
      - name: get-compliance
        type: call
        call: azure-policy.get-compliance-state
        with:
          subscription_id: '{{subscription_id}}'
      - name: email-report
        type: call
        call: graph-mail-gov.send-mail
        with:
          sender_id: governance@microsoft.com
          subject: Azure Policy Compliance Report — Subscription {{subscription_id}}
          body: 'Compliant: {{get-compliance.compliant_count}} | Non-compliant: {{get-compliance.non_compliant_count}} | Exempt: {{get-compliance.exempt_count}}'
      - name: notify-teams
        type: call
        call: msteams-gov.post-channel-message
        with:
          channel_id: Governance
          text: 'Policy compliance report for subscription {{subscription_id}}: {{get-compliance.compliant_count}} compliant, {{get-compliance.non_compliant_count}} non-compliant.'
  consumes:
  - type: http
    namespace: azure-policy
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: compliance-states
      path: /subscriptions/{{subscription_id}}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize
      inputParameters:
      - name: subscription_id
        in: path
      operations:
      - name: get-compliance-state
        method: POST
  - type: http
    namespace: graph-mail-gov
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: msteams-gov
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-policy-compliance-reporter.yml

Polls Datadog SLO status for target services, posts breach alerts to Microsoft Teams on-call channel, and opens ServiceNow incidents for any SLO below threshold.

naftiko: '0.5'
info:
  label: Datadog SLO Breach Alert
  description: Polls Datadog SLO status for target services, posts breach alerts to Microsoft Teams on-call channel, and opens ServiceNow incidents for any SLO below threshold.
  tags:
  - observability
  - slo
  - datadog
  - servicenow
  - microsoft-teams
  - reliability
capability:
  exposes:
  - type: mcp
    namespace: reliability-ops
    port: 8080
    tools:
    - name: check-slo-breaches
      description: Given a Datadog SLO group ID and minimum compliance threshold, list SLOs below the threshold, open ServiceNow P2 incidents for each breached SLO, and post a summary to the OnCall Teams channel.
      inputParameters:
      - name: slo_group_id
        in: body
        type: string
        description: Datadog SLO group or service tag to query.
      - name: compliance_threshold
        in: body
        type: number
        description: Minimum SLO compliance percentage (e.g. 99.9) below which an alert is triggered.
      steps:
      - name: get-slo-status
        type: call
        call: datadog-slo.list-slos
        with:
          tags: service:{{slo_group_id}}
      - name: create-snow-incident
        type: call
        call: servicenow-slo.create-incident
        with:
          short_description: 'SLO breach: {{slo_group_id}} below {{compliance_threshold}}%'
          urgency: '2'
          category: reliability
      - name: alert-oncall
        type: call
        call: msteams-slo.post-channel-message
        with:
          channel_id: OnCall
          text: 'SLO breach: {{slo_group_id}} at {{get-slo-status.compliance}}% (threshold {{compliance_threshold}}%). SNOW: {{create-snow-incident.number}}'
  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
      inputParameters:
      - name: tags
        in: query
      operations:
      - name: list-slos
        method: GET
  - type: http
    namespace: servicenow-slo
    baseUri: https://microsoft.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-slo
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-slo-breach-alert.yml

Creates an Event Grid subscription for a topic, validates the endpoint, and posts a confirmation to the platform engineering Teams channel.

naftiko: '0.5'
info:
  label: Azure Event Grid Subscription Manager
  description: Creates an Event Grid subscription for a topic, validates the endpoint, and posts a confirmation to the platform engineering Teams channel.
  tags:
  - integration
  - events
  - azure
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: eventgrid-mgr
    port: 8080
    tools:
    - name: create-subscription
      description: Create an Azure Event Grid subscription and confirm it in Teams.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group name.
      - name: topic_name
        in: body
        type: string
        description: Event Grid topic name.
      - name: subscription_name
        in: body
        type: string
        description: Event subscription name.
      - name: endpoint_url
        in: body
        type: string
        description: Webhook endpoint URL.
      steps:
      - name: create-sub
        type: call
        call: eventgrid-api.create-event-subscription
        with:
          subscription_id: '{{subscription_id}}'
          resource_group: '{{resource_group}}'
          topic_name: '{{topic_name}}'
          subscription_name: '{{subscription_name}}'
      - name: confirm-teams
        type: call
        call: msteams-platform-eg.post-channel-message
        with:
          channel_id: PlatformEngineering
          text: 'Event Grid subscription {{subscription_name}} created for topic {{topic_name}}. Endpoint: {{endpoint_url}}. Status: {{create-sub.provisioning_state}}'
  consumes:
  - type: http
    namespace: eventgrid-api
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_token
    resources:
    - name: event-subscriptions
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.EventGrid/topics/{{topic_name}}/eventSubscriptions/{{subscription_name}}
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: topic_name
        in: path
      - name: subscription_name
        in: path
      operations:
      - name: create-event-subscription
        method: PUT
  - type: http
    namespace: msteams-platform-eg
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → azure-event-grid-subscription-manager.yml

Sends an email on behalf of a user via Microsoft Graph Mail API.

naftiko: '0.5'
info:
  label: Outlook Email Sender
  description: Sends an email on behalf of a user via Microsoft Graph Mail API.
  tags:
  - communication
  - email
  - microsoft-outlook
  - microsoft-graph
capability:
  exposes:
  - type: mcp
    namespace: outlook-mail
    port: 8080
    tools:
    - name: send-email
      description: Send an email through Microsoft Outlook via the Graph API.
      inputParameters:
      - name: sender_id
        in: body
        type: string
        description: User ID or principal name of the sender.
      - name: to_address
        in: body
        type: string
        description: Recipient email address.
      - name: subject
        in: body
        type: string
        description: Email subject line.
      - name: body_content
        in: body
        type: string
        description: Email body in plain text.
  consumes:
  - type: http
    namespace: graph-mail
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send
        method: POST
Open in Framework → View in Fleet → outlook-email-sender.yml

When an invoice is created in Dynamics 365, extracts the invoice details, creates a corresponding entry in QuickBooks Online, and logs the sync to a SharePoint audit list.

naftiko: '0.5'
info:
  label: Dynamics 365 Invoice to QuickBooks Sync
  description: When an invoice is created in Dynamics 365, extracts the invoice details, creates a corresponding entry in QuickBooks Online, and logs the sync to a SharePoint audit list.
  tags:
  - erp
  - finance
  - dynamics-365
  - integration
  - sharepoint
capability:
  exposes:
  - type: mcp
    namespace: invoice-sync
    port: 8080
    tools:
    - name: sync-invoice
      description: Sync a Dynamics 365 invoice to QuickBooks Online and log the sync event.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: Dynamics 365 invoice ID.
      steps:
      - name: get-invoice
        type: call
        call: d365-invoices.get-invoice
        with:
          invoice_id: '{{invoice_id}}'
      - name: create-qb-invoice
        type: call
        call: quickbooks-api.create-invoice
        with:
          customer_name: '{{get-invoice.customer_name}}'
          amount: '{{get-invoice.total_amount}}'
      - name: log-to-sharepoint
        type: call
        call: graph-sp-audit.create-list-item
        with:
          site_id: finance-audit
          list_id: invoice-sync-log
  consumes:
  - type: http
    namespace: d365-invoices
    baseUri: https://$secrets.d365_org.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.d365_token
    resources:
    - name: invoices
      path: /invoices({{invoice_id}})
      inputParameters:
      - name: invoice_id
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: quickbooks-api
    baseUri: https://quickbooks.api.intuit.com/v3/company/$secrets.qb_company_id
    authentication:
      type: bearer
      token: $secrets.quickbooks_token
    resources:
    - name: invoices
      path: /invoice
      operations:
      - name: create-invoice
        method: POST
  - type: http
    namespace: graph-sp-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 → dynamics-365-invoice-to-quickbooks-sync.yml

Creates a new contact record in Dynamics 365 CRM via the Dataverse Web API.

naftiko: '0.5'
info:
  label: Dynamics 365 Contact Creator
  description: Creates a new contact record in Dynamics 365 CRM via the Dataverse Web API.
  tags:
  - crm
  - dynamics-365
  - sales
  - microsoft
capability:
  exposes:
  - type: mcp
    namespace: d365-contacts
    port: 8080
    tools:
    - name: create-contact
      description: Create a new contact in Dynamics 365 with the given name and email.
      inputParameters:
      - name: first_name
        in: body
        type: string
        description: Contact first name.
      - name: last_name
        in: body
        type: string
        description: Contact last name.
      - name: email
        in: body
        type: string
        description: Contact email address.
  consumes:
  - type: http
    namespace: d365-api
    baseUri: https://$secrets.d365_org.crm.dynamics.com/api/data/v9.2
    authentication:
      type: bearer
      token: $secrets.d365_token
    resources:
    - name: contacts
      path: /contacts
      operations:
      - name: create
        method: POST
Open in Framework → View in Fleet → dynamics-365-contact-creator.yml

Retrieves the health status of endpoints in an Azure Traffic Manager profile, returning endpoint monitoring state and failover readiness.

naftiko: '0.5'
info:
  label: Azure Traffic Manager Health Check
  description: Retrieves the health status of endpoints in an Azure Traffic Manager profile, returning endpoint monitoring state and failover readiness.
  tags:
  - azure
  - networking
  - traffic-manager
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: traffic-manager-health
    port: 8080
    tools:
    - name: get-traffic-manager-health
      description: Check health status of all endpoints in an Azure Traffic Manager profile.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID.
      - name: resource_group
        in: body
        type: string
        description: Resource group containing the Traffic Manager profile.
      - name: profile_name
        in: body
        type: string
        description: Traffic Manager profile name.
      call: azure.get-tm-profile
      with:
        subscription_id: '{{subscription_id}}'
        resource_group: '{{resource_group}}'
        profile_name: '{{profile_name}}'
      outputParameters:
      - name: profile_status
        type: string
        mapping: $.properties.profileStatus
      - name: endpoints
        type: array
        mapping: $.properties.endpoints
  consumes:
  - type: http
    namespace: azure
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_management_token
    resources:
    - name: tm-profile
      path: /subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.Network/trafficManagerProfiles/{{profile_name}}?api-version=2022-04-01
      inputParameters:
      - name: subscription_id
        in: path
      - name: resource_group
        in: path
      - name: profile_name
        in: path
      operations:
      - name: get-tm-profile
        method: GET
Open in Framework → View in Fleet → azure-traffic-manager-health-check.yml

Reviews inactive Microsoft 365 groups, notifies group owners via email for attestation, and archives groups that remain unattested after the review period.

naftiko: '0.5'
info:
  label: M365 Group Lifecycle Manager
  description: Reviews inactive Microsoft 365 groups, notifies group owners via email for attestation, and archives groups that remain unattested after the review period.
  tags:
  - governance
  - microsoft-365
  - microsoft-graph
  - microsoft-outlook
  - collaboration
capability:
  exposes:
  - type: mcp
    namespace: group-lifecycle
    port: 8080
    tools:
    - name: review-inactive-groups
      description: Identify inactive M365 groups, email owners for attestation, and flag groups for archival.
      inputParameters:
      - name: inactivity_days
        in: body
        type: integer
        description: Number of days of inactivity to qualify as inactive.
      steps:
      - name: list-groups
        type: call
        call: graph-groups.list-groups
        with: {}
      - name: notify-owners
        type: call
        call: graph-mail-lifecycle.send-mail
        with:
          sender_id: m365-lifecycle@microsoft.com
          subject: M365 Group Attestation Required
          body: Your group has been inactive for more than {{inactivity_days}} days. Please attest continued need or the group will be archived.
      - name: post-summary
        type: call
        call: msteams-it.post-channel-message
        with:
          channel_id: ITGovernance
          text: 'M365 group lifecycle review: {{list-groups.inactive_count}} inactive groups identified. Owners notified for attestation.'
  consumes:
  - type: http
    namespace: graph-groups
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: groups
      path: /groups
      operations:
      - name: list-groups
        method: GET
  - type: http
    namespace: graph-mail-lifecycle
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: send-mail
      path: /users/{{sender_id}}/sendMail
      inputParameters:
      - name: sender_id
        in: path
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: msteams-it
    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: post-channel-message
        method: POST
Open in Framework → View in Fleet → m365-group-lifecycle-manager.yml

Fetches payroll journal totals from Workday and cross-references against the Snowflake financial data warehouse to validate period accuracy.

naftiko: '0.5'
info:
  label: Workday Payroll Journal to Snowflake Reconciliation
  description: Fetches payroll journal totals from Workday and cross-references against the Snowflake financial data warehouse to validate period accuracy.
  tags:
  - finance
  - payroll
  - workday
  - snowflake
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: payroll-reconciliation
    port: 8080
    tools:
    - name: reconcile-payroll-journals
      description: Fetch payroll journal totals for a given pay period from Workday and compare against the Snowflake financial data warehouse. Post reconciliation status to the finance Slack channel. Use at month-end close.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: Pay period identifier in YYYY-MM format (e.g., '2026-03').
      - name: slack_channel
        in: body
        type: string
        description: Finance Slack channel for reconciliation status.
      steps:
      - name: get-workday-journals
        type: call
        call: workday.get-payroll-journals
        with:
          pay_period: '{{pay_period}}'
      - name: get-snowflake-totals
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT SUM(AMOUNT) as TOTAL FROM FINANCIAL_DW.PUBLIC.PAYROLL_JOURNAL WHERE PAY_PERIOD = '{{pay_period}}'
      - name: post-reconciliation-status
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Payroll Reconciliation {{pay_period}}: Workday journals fetched, Snowflake query complete. Please validate totals in the finance portal.'
  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: /oracle/payrollResults
      inputParameters:
      - name: pay_period
        in: query
      operations:
      - name: get-payroll-journals
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://oracle.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: 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 → workday-payroll-journal-to-snowflake-reconciliation.yml

Generates a compensation band distribution report by department and job family from Workday and publishes it to Confluence for the compensation committee.

naftiko: '0.5'
info:
  label: Workday Compensation Band Audit Report
  description: Generates a compensation band distribution report by department and job family from Workday and publishes it to Confluence for the compensation committee.
  tags:
  - hr
  - compensation
  - workday
  - confluence
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: comp-audit
    port: 8080
    tools:
    - name: publish-compensation-audit
      description: Fetch compensation band distribution by department from Workday and publish the report to Confluence for the compensation committee. Use for annual pay equity reviews or board compensation reporting.
      inputParameters:
      - name: business_unit
        in: body
        type: string
        description: Oracle business unit to scope the compensation report (e.g., 'Cloud Infrastructure').
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for the compensation report.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for the report.
      steps:
      - name: get-compensation-data
        type: call
        call: workday.get-compensation-summary
        with:
          business_unit: '{{business_unit}}'
      - name: publish-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: Compensation Band Audit — {{business_unit}}
          content: 'Workday compensation band distribution for {{business_unit}}. Total employees in scope: {{get-compensation-data.total}}. Report generated for compensation committee review.'
  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-workers
      path: /oracle/workers
      inputParameters:
      - name: business_unit
        in: query
      operations:
      - name: get-compensation-summary
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://oracle.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
Open in Framework → View in Fleet → workday-compensation-band-audit-report.yml

Publishes a new technical knowledge base article to a Confluence space and notifies the relevant Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Confluence Knowledge Base Publish
  description: Publishes a new technical knowledge base article to a Confluence space and notifies the relevant Microsoft Teams channel.
  tags:
  - communication
  - confluence
  - microsoft-teams
  - documentation
capability:
  exposes:
  - type: mcp
    namespace: kb-publishing
    port: 8080
    tools:
    - name: publish-kb-article
      description: Given a Confluence space key, parent page, title, and content, create a knowledge base article and notify the designated Teams channel. Use for publishing product documentation, runbooks, or support articles.
      inputParameters:
      - name: space_key
        in: body
        type: string
        description: The Confluence space key (e.g., 'DOCS').
      - name: parent_page_id
        in: body
        type: string
        description: Confluence parent page ID for the KB article.
      - name: title
        in: body
        type: string
        description: Title of the knowledge base article.
      - name: content
        in: body
        type: string
        description: Article content in Confluence storage format.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID to notify of the new article.
      steps:
      - name: create-kb-article
        type: call
        call: confluence.create-page
        with:
          space_key: '{{space_key}}'
          parent_page_id: '{{parent_page_id}}'
          title: '{{title}}'
          content: '{{content}}'
      - name: notify-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'New KB article published: {{title}} — {{create-kb-article.webui_url}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://oracle.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{team_id}}/channels/{{channel_id}}/messages
      inputParameters:
      - name: team_id
        in: path
      - name: channel_id
        in: path
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → confluence-knowledge-base-publish.yml

On a P1 ServiceNow incident, creates a Jira escalation issue, posts an alert to PagerDuty, and notifies the incident response Slack channel.

naftiko: '0.5'
info:
  label: ServiceNow P1 Incident Response Chain
  description: On a P1 ServiceNow incident, creates a Jira escalation issue, posts an alert to PagerDuty, and notifies the incident response Slack channel.
  tags:
  - itsm
  - incident-response
  - servicenow
  - jira
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: incident-response
    port: 8080
    tools:
    - name: handle-p1-incident
      description: 'Given a ServiceNow P1 incident number, create a Jira escalation issue, trigger a PagerDuty incident, and post a war-room link to the #incidents Slack channel. Use immediately when a production P1 is declared.'
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: The ServiceNow P1 incident number (e.g., 'INC0012345').
      - name: pagerduty_service_id
        in: body
        type: string
        description: The PagerDuty service ID responsible for the affected system.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: create-jira-escalation
        type: call
        call: jira.create-issue
        with:
          project_key: OPS
          issuetype: Bug
          priority: Highest
          summary: '[P1] {{get-incident.short_description}}'
          description: 'ServiceNow P1: {{incident_number}}

            {{get-incident.description}}'
      - name: trigger-pagerduty
        type: call
        call: pagerduty.create-incident
        with:
          service_id: '{{pagerduty_service_id}}'
          title: 'P1: {{get-incident.short_description}}'
          incident_key: '{{incident_number}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: incidents
          text: 'P1 INCIDENT: {{incident_number}} | {{get-incident.short_description}} | Jira: {{create-jira-escalation.key}} | PD: {{trigger-pagerduty.incident_number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://oracle.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: get-incident
        method: GET
  - type: http
    namespace: jira
    baseUri: https://oracle.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: 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
  - 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 → servicenow-p1-incident-response-chain.yml

Automatically provisions a new Okta user profile when a new hire record is created in Workday, assigning the correct department groups.

naftiko: '0.5'
info:
  label: Okta User Provisioning from Workday Hire
  description: Automatically provisions a new Okta user profile when a new hire record is created in Workday, assigning the correct department groups.
  tags:
  - identity
  - hr
  - okta
  - workday
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: identity-provisioning
    port: 8080
    tools:
    - name: provision-new-user
      description: Given a Workday employee ID, create an Okta user profile with the correct department group assignments. Use when a new hire record is created in Workday to automate SSO provisioning.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: okta_department_group_id
        in: body
        type: string
        description: The Okta group ID for the employee's department.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-okta-user
        type: call
        call: okta.create-user
        with:
          first_name: '{{get-employee.first_name}}'
          last_name: '{{get-employee.last_name}}'
          email: '{{get-employee.work_email}}'
          login: '{{get-employee.work_email}}'
      - name: add-to-department-group
        type: call
        call: okta-group.add-user-to-group
        with:
          group_id: '{{okta_department_group_id}}'
          user_id: '{{create-okta-user.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: /oracle/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://oracle.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: okta-group
    baseUri: https://oracle.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-users
      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-user-provisioning-from-workday-hire.yml

When an employee's role changes in Workday, updates their Okta group memberships to reflect the new access requirements.

naftiko: '0.5'
info:
  label: Workday Role Change and Okta Group Sync
  description: When an employee's role changes in Workday, updates their Okta group memberships to reflect the new access requirements.
  tags:
  - hr
  - identity
  - workday
  - okta
  - access-management
capability:
  exposes:
  - type: mcp
    namespace: role-access-sync
    port: 8080
    tools:
    - name: sync-role-access-change
      description: Given a Workday employee ID, old Okta group ID, and new Okta group ID, remove the user from the old access group and add to the new one. Use when an Oracle employee is promoted or transfers between teams.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the employee whose role changed.
      - name: old_okta_group_id
        in: body
        type: string
        description: The Okta group ID for the previous role's access.
      - name: new_okta_group_id
        in: body
        type: string
        description: The Okta group ID for the new role's access.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: remove-old-group
        type: call
        call: okta-remove.remove-user-from-group
        with:
          group_id: '{{old_okta_group_id}}'
          user_id: '{{get-employee.okta_user_id}}'
      - name: add-new-group
        type: call
        call: okta-add.add-user-to-group
        with:
          group_id: '{{new_okta_group_id}}'
          user_id: '{{get-employee.okta_user_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: /oracle/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-remove
    baseUri: https://oracle.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-users
      path: /groups/{{group_id}}/users/{{user_id}}
      inputParameters:
      - name: group_id
        in: path
      - name: user_id
        in: path
      operations:
      - name: remove-user-from-group
        method: DELETE
  - type: http
    namespace: okta-add
    baseUri: https://oracle.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: group-users
      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 → workday-role-change-and-okta-group-sync.yml

Fetches open Dependabot security alerts for a GitHub repository and creates Jira security tickets for critical severity findings.

naftiko: '0.5'
info:
  label: GitHub Dependabot Vulnerability Triage
  description: Fetches open Dependabot security alerts for a GitHub repository and creates Jira security tickets for critical severity findings.
  tags:
  - security
  - devops
  - github
  - jira
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: vuln-triage
    port: 8080
    tools:
    - name: triage-dependabot-alerts
      description: Fetch open Dependabot alerts at critical severity for a GitHub repository and create a Jira ticket for remediation. Use during weekly vulnerability review or after a new CVE disclosure affecting Oracle's open source projects.
      inputParameters:
      - name: repository
        in: body
        type: string
        description: GitHub repository name within the Oracle org (e.g., 'graalvm/graal').
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for security remediation tickets (e.g., 'SECURITY').
      steps:
      - name: list-alerts
        type: call
        call: github.list-dependabot-alerts
        with:
          owner: oracle
          repo: '{{repository}}'
          severity: critical
          state: open
      - name: create-security-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: Dependabot critical vulnerabilities in {{repository}}
          description: Open critical Dependabot alerts in {{repository}}. Immediate remediation required per Oracle security policy.
  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
      - name: state
        in: query
      operations:
      - name: list-dependabot-alerts
        method: GET
  - type: http
    namespace: jira
    baseUri: https://oracle.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-dependabot-vulnerability-triage.yml

Publishes an Oracle employer brand post to the LinkedIn company page and notifies the corporate communications Slack channel.

naftiko: '0.5'
info:
  label: LinkedIn Employer Brand Post Publisher
  description: Publishes an Oracle employer brand post to the LinkedIn company page and notifies the corporate communications Slack channel.
  tags:
  - marketing
  - social
  - linkedin
  - slack
capability:
  exposes:
  - type: mcp
    namespace: brand-publishing
    port: 8080
    tools:
    - name: publish-linkedin-post
      description: 'Given post text, publish an employer brand or product announcement post to the Oracle LinkedIn company page and notify the #corporate-comms Slack channel. Use for product launches, award announcements, or recruitment campaigns.'
      inputParameters:
      - name: post_text
        in: body
        type: string
        description: The text content of the LinkedIn post.
      - name: visibility
        in: body
        type: string
        description: 'Post visibility: ''PUBLIC'' or ''CONNECTIONS''.'
      steps:
      - name: create-linkedin-post
        type: call
        call: linkedin.create-ugc-post
        with:
          text: '{{post_text}}'
          visibility: '{{visibility}}'
      - name: notify-comms
        type: call
        call: slack.post-message
        with:
          channel: corporate-comms
          text: 'LinkedIn post published: {{create-linkedin-post.activity_id}}'
  consumes:
  - type: http
    namespace: linkedin
    baseUri: https://api.linkedin.com/v2
    authentication:
      type: bearer
      token: $secrets.linkedin_access_token
    resources:
    - name: ugc-posts
      path: /ugcPosts
      operations:
      - name: create-ugc-post
        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 → linkedin-employer-brand-post-publisher.yml

Queries Datadog for SLO compliance data across Oracle Cloud services in the past 7 days and publishes a weekly reliability report to Confluence.

naftiko: '0.5'
info:
  label: Datadog SLO Weekly Reliability Report
  description: Queries Datadog for SLO compliance data across Oracle Cloud services in the past 7 days and publishes a weekly reliability report to Confluence.
  tags:
  - observability
  - datadog
  - confluence
  - slo
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: reliability-ops
    port: 8080
    tools:
    - name: publish-weekly-slo-report
      description: Fetch Datadog SLO compliance for Oracle Cloud services over the past 7 days and publish a weekly reliability report to Confluence. Use for engineering leadership reliability reviews.
      inputParameters:
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for the SLO report.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for the weekly report.
      - name: slo_query
        in: body
        type: string
        description: Datadog SLO query filter string (e.g., 'service:oci-production').
      steps:
      - name: get-slo-data
        type: call
        call: datadog.list-slos
        with:
          query: '{{slo_query}}'
      - name: publish-slo-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: Weekly SLO Reliability Report
          content: 'Oracle Cloud SLO compliance data from Datadog for the past 7 days. Total SLOs monitored: {{get-slo-data.total_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: slos
      path: /slo
      inputParameters:
      - name: query
        in: query
      operations:
      - name: list-slos
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://oracle.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
Open in Framework → View in Fleet → datadog-slo-weekly-reliability-report.yml

Retrieves Terraform Cloud cost estimate for a pending run and posts the projected infrastructure spend to the FinOps Slack channel for review.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Cost Estimation
  description: Retrieves Terraform Cloud cost estimate for a pending run and posts the projected infrastructure spend to the FinOps Slack channel for review.
  tags:
  - cloud
  - finops
  - terraform
  - slack
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: infra-cost
    port: 8080
    tools:
    - name: review-terraform-cost-estimate
      description: Given a Terraform Cloud run ID, fetch the cost estimate for the planned infrastructure changes and post the projected monthly cost to the FinOps Slack channel. Use before applying large infrastructure changes.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Terraform Cloud run ID with a completed cost estimate (e.g., 'run-abc123').
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the cost estimate review (e.g., '#finops').
      steps:
      - name: get-cost-estimate
        type: call
        call: terraform.get-run-cost-estimate
        with:
          run_id: '{{run_id}}'
      - name: post-estimate
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Terraform Cost Estimate: Run {{run_id}} | Projected monthly cost: {{get-cost-estimate.proposed_monthly_cost}} | Delta: {{get-cost-estimate.delta_monthly_cost}}. Approve or reject the run in Terraform Cloud.'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs/{{run_id}}/cost-estimate
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run-cost-estimate
        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 → terraform-cloud-workspace-cost-estimation.yml

Returns current headcount by department and region from Workday, used for Oracle workforce planning and executive reporting.

naftiko: '0.5'
info:
  label: Global Headcount Snapshot
  description: Returns current headcount by department and region from Workday, used for Oracle workforce planning and executive reporting.
  tags:
  - hr
  - workforce-planning
  - workday
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: get-headcount-snapshot
      description: Return a snapshot of active Oracle employees grouped by department, region, and cost center from Workday. Use for global workforce planning, executive headcount reviews, or finance reporting.
      call: workday.list-workers
      outputParameters:
      - name: employees
        type: array
        mapping: $.data
      - name: total_count
        type: number
        mapping: $.total
  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: /oracle/workers
      operations:
      - name: list-workers
        method: GET
Open in Framework → View in Fleet → global-headcount-snapshot.yml

Queries Snowflake account usage for credit consumption by warehouse and posts the cost report to the FinOps Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Cloud Data Warehouse Cost Report
  description: Queries Snowflake account usage for credit consumption by warehouse and posts the cost report to the FinOps Slack channel.
  tags:
  - finops
  - data
  - snowflake
  - slack
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: report-warehouse-costs
      description: Query Snowflake credit consumption by virtual warehouse over a given date range and post the cost summary to the FinOps Slack channel. Use for weekly or monthly cloud cost reviews.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Report start date in ISO 8601 format (YYYY-MM-DD).
      - name: end_date
        in: body
        type: string
        description: Report end date in ISO 8601 format (YYYY-MM-DD).
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the cost report (e.g., '#finops').
      steps:
      - name: query-credit-usage
        type: call
        call: snowflake.execute-statement
        with:
          statement: SELECT WAREHOUSE_NAME, SUM(CREDITS_USED) as TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME BETWEEN '{{start_date}}' AND '{{end_date}}' GROUP BY WAREHOUSE_NAME ORDER BY TOTAL_CREDITS DESC
      - name: post-cost-report
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Snowflake Cost Report ({{start_date}} to {{end_date}}): Query executed. Review warehouse credit consumption for cost optimization opportunities.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://oracle.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: 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 → snowflake-cloud-data-warehouse-cost-report.yml

When a Salesforce opportunity is marked Closed Won, creates a Jira project for implementation delivery and notifies the project management team via Slack.

naftiko: '0.5'
info:
  label: Salesforce Closed Won to Jira Project Creation
  description: When a Salesforce opportunity is marked Closed Won, creates a Jira project for implementation delivery and notifies the project management team via Slack.
  tags:
  - sales
  - devops
  - salesforce
  - jira
  - slack
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: deal-to-delivery
    port: 8080
    tools:
    - name: create-delivery-project
      description: Given a Salesforce Closed Won opportunity ID, fetch deal details and create a Jira implementation project, then notify the delivery team Slack channel. Use when a deal closes to kick off the implementation lifecycle.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID that just closed won.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key to create for delivery (e.g., 'IMPL').
      - name: slack_channel
        in: body
        type: string
        description: Delivery team Slack channel to notify.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: create-jira-epic
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Epic
          summary: 'Implementation: {{get-opportunity.Name}}'
          description: 'Customer: {{get-opportunity.AccountName}}

            Contract Value: {{get-opportunity.Amount}}

            Close Date: {{get-opportunity.CloseDate}}

            SFDC: {{opportunity_id}}'
      - name: notify-delivery
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'New Deal Closed: {{get-opportunity.Name}} ({{get-opportunity.Amount}}) — Jira Epic created: {{create-jira-epic.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://oracle.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: jira
    baseUri: https://oracle.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-closed-won-to-jira-project-creation.yml

When a Workday termination is recorded, suspends the Okta account, removes Salesforce user licenses, and creates a ServiceNow offboarding task.

naftiko: '0.5'
info:
  label: Employee Offboarding and Deprovisioning
  description: When a Workday termination is recorded, suspends the Okta account, removes Salesforce user licenses, and creates a ServiceNow offboarding task.
  tags:
  - hr
  - offboarding
  - workday
  - okta
  - salesforce
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID, suspend the Okta account, remove Salesforce user permissions, and create a ServiceNow offboarding task. Use when an Oracle employee separates from the company.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID of the departing employee.
      - name: last_day
        in: body
        type: string
        description: Employee's last working day in ISO 8601 format (YYYY-MM-DD).
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: suspend-okta
        type: call
        call: okta.suspend-user
        with:
          user_id: '{{get-employee.okta_user_id}}'
      - name: freeze-salesforce-user
        type: call
        call: salesforce.update-user
        with:
          user_id: '{{get-employee.salesforce_user_id}}'
          is_active: 'false'
      - name: create-offboarding-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Offboarding: {{get-employee.full_name}} — last day {{last_day}}'
          category: hr_offboarding
  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: /oracle/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://oracle.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: user-suspend
      path: /users/{{user_id}}/lifecycle/suspend
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: suspend-user
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://oracle.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: update-user
        method: PATCH
  - type: http
    namespace: servicenow
    baseUri: https://oracle.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 → employee-offboarding-and-deprovisioning.yml

Syncs HubSpot marketing contacts that have crossed the MQL threshold into Salesforce as leads, with lead source and engagement data.

naftiko: '0.5'
info:
  label: HubSpot to Salesforce Contact Sync
  description: Syncs HubSpot marketing contacts that have crossed the MQL threshold into Salesforce as leads, with lead source and engagement data.
  tags:
  - marketing
  - sales
  - hubspot
  - salesforce
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: mql-sync
    port: 8080
    tools:
    - name: sync-mql-to-salesforce
      description: Given a HubSpot contact ID, fetch contact and engagement details and create a Salesforce lead record with lead source and HubSpot score. Use when a HubSpot contact reaches MQL status for sales follow-up.
      inputParameters:
      - name: hubspot_contact_id
        in: body
        type: string
        description: The HubSpot contact ID to sync as a Salesforce lead.
      steps:
      - name: get-hubspot-contact
        type: call
        call: hubspot.get-contact
        with:
          contact_id: '{{hubspot_contact_id}}'
      - name: create-salesforce-lead
        type: call
        call: salesforce.create-lead
        with:
          first_name: '{{get-hubspot-contact.firstname}}'
          last_name: '{{get-hubspot-contact.lastname}}'
          email: '{{get-hubspot-contact.email}}'
          company: '{{get-hubspot-contact.company}}'
          lead_source: HubSpot MQL
  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://oracle.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
Open in Framework → View in Fleet → hubspot-to-salesforce-contact-sync.yml

Creates a ServiceNow change request for an Oracle Database maintenance patch, including a maintenance window, and notifies the DBA team via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow IT Change Request for Database Patch
  description: Creates a ServiceNow change request for an Oracle Database maintenance patch, including a maintenance window, and notifies the DBA team via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - database
capability:
  exposes:
  - type: mcp
    namespace: db-change-ops
    port: 8080
    tools:
    - name: create-database-patch-change"
      description: Given database system ID, patch description, and maintenance window, create a ServiceNow change request and notify the DBA team via Microsoft Teams. Use for Oracle Database patching and quarterly critical patch updates (CPU).
      inputParameters:
      - name: db_system_id
        in: body
        type: string
        description: The Oracle Database system identifier being patched (e.g., 'PROD-ODB-01').
      - name: patch_description
        in: body
        type: string
        description: Description of the database patch or critical patch update.
      - name: maintenance_start
        in: body
        type: string
        description: Maintenance window start in ISO 8601 format.
      - name: maintenance_end
        in: body
        type: string
        description: Maintenance window end in ISO 8601 format.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel to notify the DBA team.
      steps:
      - name: create-change-request
        type: call
        call: servicenow.create-change-request
        with:
          short_description: 'Oracle DB patch: {{db_system_id}} — {{patch_description}}'
          category: Database
          planned_start_date: '{{maintenance_start}}'
          planned_end_date: '{{maintenance_end}}'
      - name: notify-dba-team
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Database Maintenance: {{db_system_id}} scheduled for patching from {{maintenance_start}} to {{maintenance_end}}. Change Request: {{create-change-request.number}}.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://oracle.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
      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-it-change-request-for-database-patch.yml

Generates a list of Okta users with privileged group memberships and publishes the access certification report to Confluence for IT security review.

naftiko: '0.5'
info:
  label: Okta Quarterly Access Certification
  description: Generates a list of Okta users with privileged group memberships and publishes the access certification report to Confluence for IT security review.
  tags:
  - identity
  - security
  - okta
  - confluence
  - access-review
capability:
  exposes:
  - type: mcp
    namespace: access-certification
    port: 8080
    tools:
    - name: run-access-certification
      description: List all users in privileged Okta groups and publish a quarterly access certification report to Confluence. Use for SOX, ISO 27001, or FedRAMP access review cycles.
      inputParameters:
      - name: okta_group_id
        in: body
        type: string
        description: The Okta group ID to audit for privileged access.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for the access certification report.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for the quarterly report.
      steps:
      - name: list-group-users
        type: call
        call: okta.list-group-members
        with:
          group_id: '{{okta_group_id}}'
      - name: publish-cert-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: Quarterly Access Certification — Group {{okta_group_id}}
          content: 'Privileged access certification for Okta group {{okta_group_id}}. Users: {{list-group-users.count}}. Review and certify or revoke access for each entry.'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://oracle.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: list-group-members
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://oracle.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
Open in Framework → View in Fleet → okta-quarterly-access-certification.yml

Fetches the completed sprint metrics for a Jira board and publishes a sprint retrospective summary to Confluence.

naftiko: '0.5'
info:
  label: Jira Sprint Completion Report
  description: Fetches the completed sprint metrics for a Jira board and publishes a sprint retrospective summary to Confluence.
  tags:
  - devops
  - jira
  - confluence
  - reporting
  - agile
capability:
  exposes:
  - type: mcp
    namespace: sprint-reporting
    port: 8080
    tools:
    - name: publish-sprint-report
      description: Given a Jira board ID and completed sprint ID, fetch sprint velocity, completion rate, and bug count, then publish a sprint report to Confluence. Use for sprint retrospectives or engineering velocity tracking.
      inputParameters:
      - name: board_id
        in: body
        type: integer
        description: The Jira agile board ID to report on.
      - name: sprint_id
        in: body
        type: integer
        description: The completed Jira sprint ID.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for sprint reports.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for the sprint report.
      steps:
      - name: get-sprint-issues
        type: call
        call: jira.search-issues
        with:
          jql: sprint = {{sprint_id}} AND project = ORDER BY status
      - name: publish-sprint-report
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: Sprint Report — Sprint {{sprint_id}}
          content: 'Sprint {{sprint_id}} completion report. Total issues: {{get-sprint-issues.total}}. Board: {{board_id}}.'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://oracle.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: jql
        in: query
      operations:
      - name: search-issues
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://oracle.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
Open in Framework → View in Fleet → jira-sprint-completion-report.yml

Queries Datadog for the current monitor status of a named Oracle Cloud service and returns the aggregate health state.

naftiko: '0.5'
info:
  label: Datadog Service Health Dashboard Lookup
  description: Queries Datadog for the current monitor status of a named Oracle Cloud service and returns the aggregate health state.
  tags:
  - observability
  - datadog
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: cloud-health
    port: 8080
    tools:
    - name: get-service-health
      description: Given a Datadog service name, return the current monitor states and total alert count. Use to check Oracle Cloud service health before deployments or executive briefings.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog service name to query (e.g., 'oci-compute-service').
      call: datadog.get-monitors
      with:
        name: '{{service_name}}'
      outputParameters:
      - name: monitors
        type: array
        mapping: $.monitors
      - name: alert_count
        type: number
        mapping: $.total_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: monitors
      path: /monitor
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-monitors
        method: GET
Open in Framework → View in Fleet → datadog-service-health-dashboard-lookup.yml

Executes a SQL data quality assertion against a Snowflake analytics table and blocks downstream pipeline runs by posting a fail alert to Slack.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Gate for Analytics Pipeline
  description: Executes a SQL data quality assertion against a Snowflake analytics table and blocks downstream pipeline runs by posting a fail alert to Slack.
  tags:
  - data
  - analytics
  - snowflake
  - slack
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: analytics-quality
    port: 8080
    tools:
    - name: run-analytics-data-check
      description: Execute a SQL data quality assertion against a Snowflake analytics table and post pass/fail results to Slack. Use as a gate before loading data into Oracle Analytics or BI dashboards.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully-qualified Snowflake table name (e.g., 'ANALYTICS_DB.SALES.OPPORTUNITY_FACTS').
      - name: sql_assertion
        in: body
        type: string
        description: The SQL quality assertion to execute. Should return 0 rows on pass.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to post quality results to.
      steps:
      - name: execute-assertion
        type: call
        call: snowflake.execute-statement
        with:
          statement: '{{sql_assertion}}'
      - name: post-result
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Data Quality Check on {{table_name}}: Assertion executed. Review results — statement handle: {{execute-assertion.statementHandle}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://oracle.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: 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 → snowflake-data-quality-gate-for-analytics-pipeline.yml

Fetches HubSpot email campaign performance for the past 30 days and publishes a digest to the Oracle marketing Microsoft Teams channel.

naftiko: '0.5'
info:
  label: HubSpot Marketing Campaign Digest
  description: Fetches HubSpot email campaign performance for the past 30 days and publishes a digest to the Oracle marketing Microsoft Teams channel.
  tags:
  - marketing
  - hubspot
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: marketing-reporting
    port: 8080
    tools:
    - name: digest-campaign-performance
      description: Fetch HubSpot email campaign metrics for the past 30 days and post open rate, click rate, and conversion stats to the marketing Teams channel. Use for monthly marketing performance reviews.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The HubSpot campaign ID to report on.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the marketing team.
      steps:
      - name: get-campaign-stats
        type: call
        call: hubspot.get-campaign-stats
        with:
          campaign_id: '{{campaign_id}}'
      - name: post-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Campaign Performance: {{get-campaign-stats.name}} | Sent: {{get-campaign-stats.numSent}} | Open Rate: {{get-campaign-stats.openRate}} | Click Rate: {{get-campaign-stats.clickRate}}'
  consumes:
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com/marketing/v3
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: campaign-stats
      path: /emails/statistics/list
      inputParameters:
      - name: campaign_id
        in: query
      operations:
      - name: get-campaign-stats
        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 → hubspot-marketing-campaign-digest.yml

Identifies Salesforce accounts with expiring contracts in the next 90 days that have open P1 support cases and alerts the customer success team via Slack.

naftiko: '0.5'
info:
  label: Salesforce Customer Renewal Risk Alert
  description: Identifies Salesforce accounts with expiring contracts in the next 90 days that have open P1 support cases and alerts the customer success team via Slack.
  tags:
  - sales
  - customer-success
  - salesforce
  - slack
  - renewal-management
capability:
  exposes:
  - type: mcp
    namespace: renewal-risk
    port: 8080
    tools:
    - name: alert-renewal-risk-accounts
      description: Query Salesforce for accounts with contracts expiring in 90 days that also have open P1 cases. Post at-risk accounts to the customer success Slack channel. Use weekly to prevent undetected renewal risk.
      inputParameters:
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for renewal risk alerts (e.g., '#customer-success').
      - name: territory
        in: body
        type: string
        description: Salesforce territory to scope the query.
      steps:
      - name: query-at-risk-accounts
        type: call
        call: salesforce.query-soql
        with:
          q: SELECT Account.Name, Contract.EndDate, COUNT(Case.Id) FROM Contract WHERE Contract.EndDate = NEXT_N_DAYS:90 AND Account.Territory2.Name = '{{territory}}'
      - name: post-risk-alert
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Renewal Risk Alert — {{territory}}: {{query-at-risk-accounts.totalSize}} accounts have contracts expiring in 90 days. Review in Salesforce for intervention.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://oracle.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: soql-query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-soql
        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 → salesforce-customer-renewal-risk-alert.yml

Fetches all open Salesforce opportunities in the current quarter, aggregates by stage and owner, and posts a pipeline digest to the sales leadership Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Pipeline Report
  description: Fetches all open Salesforce opportunities in the current quarter, aggregates by stage and owner, and posts a pipeline digest to the sales leadership Microsoft Teams channel.
  tags:
  - sales
  - crm
  - salesforce
  - microsoft-teams
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: sales-reporting
    port: 8080
    tools:
    - name: digest-opportunity-pipeline
      description: Query open Salesforce opportunities for the current quarter, compute pipeline value by stage, and post a digest to the sales leadership Teams channel. Use for weekly pipeline reviews or CRO briefings.
      inputParameters:
      - name: region
        in: body
        type: string
        description: Salesforce sales region to filter by (e.g., 'North America', 'EMEA').
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID for the sales leadership team.
      steps:
      - name: query-open-opportunities
        type: call
        call: salesforce.query-soql
        with:
          q: SELECT Name, StageName, Amount, CloseDate, Owner.Name FROM Opportunity WHERE IsClosed = false AND CloseDate = THIS_QUARTER AND Region__c = '{{region}}'
      - name: post-pipeline-digest
        type: call
        call: msteams.post-channel-message
        with:
          channel_id: '{{teams_channel_id}}'
          text: 'Pipeline Digest — {{region}} (This Quarter): {{query-open-opportunities.totalSize}} open opportunities. Review full breakdown in Salesforce.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://oracle.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: soql-query
      path: /query
      inputParameters:
      - name: q
        in: query
      operations:
      - name: query-soql
        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 → salesforce-opportunity-pipeline-report.yml

Triggers a Terraform Cloud run for an infrastructure workspace, monitors for plan completion, and requires a ServiceNow change approval before applying.

naftiko: '0.5'
info:
  label: Terraform Cloud Infrastructure Provisioning Gate
  description: Triggers a Terraform Cloud run for an infrastructure workspace, monitors for plan completion, and requires a ServiceNow change approval before applying.
  tags:
  - cloud
  - infrastructure
  - terraform
  - servicenow
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: gate-terraform-apply
      description: Given a Terraform Cloud workspace ID and ServiceNow change number, verify the change request is approved and trigger the Terraform apply. Use as a deployment gate for Oracle Cloud infrastructure changes.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID to apply (e.g., 'ws-abc123').
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number authorizing this infrastructure change.
      steps:
      - name: check-change-approval
        type: call
        call: servicenow.get-change-request
        with:
          number: '{{change_number}}'
      - name: trigger-terraform-run
        type: call
        call: terraform.create-run
        with:
          workspace_id: '{{workspace_id}}'
          is_destroy: 'false'
          message: Authorized by change request {{change_number}}
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://oracle.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: change-requests
      path: /table/change_request
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-change-request
        method: GET
  - 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
Open in Framework → View in Fleet → terraform-cloud-infrastructure-provisioning-gate.yml

When a PagerDuty incident is resolved, creates a Confluence postmortem page and notifies the engineering team via Slack.

naftiko: '0.5'
info:
  label: PagerDuty Incident Resolution Postmortem
  description: When a PagerDuty incident is resolved, creates a Confluence postmortem page and notifies the engineering team via Slack.
  tags:
  - itsm
  - pagerduty
  - confluence
  - slack
  - postmortem
capability:
  exposes:
  - type: mcp
    namespace: postmortem-ops
    port: 8080
    tools:
    - name: create-incident-postmortem
      description: Given a resolved PagerDuty incident ID, fetch incident details and create a Confluence postmortem page, then notify the engineering Slack channel. Use when a P1/P2 incident is resolved to begin the postmortem process.
      inputParameters:
      - name: incident_id
        in: body
        type: string
        description: The resolved PagerDuty incident ID.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key for postmortem documents.
      - name: confluence_parent_id
        in: body
        type: string
        description: Confluence parent page ID for postmortems.
      - name: slack_channel
        in: body
        type: string
        description: Engineering Slack channel to notify of new postmortem.
      steps:
      - name: get-pd-incident
        type: call
        call: pagerduty.get-incident
        with:
          incident_id: '{{incident_id}}'
      - name: create-postmortem-page
        type: call
        call: confluence.create-page
        with:
          space_key: '{{confluence_space_key}}'
          parent_page_id: '{{confluence_parent_id}}'
          title: 'Postmortem: {{get-pd-incident.title}} ({{get-pd-incident.created_at}})'
          content: 'Incident: {{get-pd-incident.title}}

            ID: {{incident_id}}

            Severity: {{get-pd-incident.urgency}}

            Created: {{get-pd-incident.created_at}}

            Resolved: {{get-pd-incident.resolved_at}}


            Timeline, root cause, and action items to be completed by the team.'
      - name: notify-engineering
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Postmortem Created: {{get-pd-incident.title}} | Confluence: {{create-postmortem-page.webui_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/{{incident_id}}
      inputParameters:
      - name: incident_id
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: confluence
    baseUri: https://oracle.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → pagerduty-incident-resolution-postmortem.yml

When a Salesforce lead reaches an MQL score threshold, converts it to an opportunity, creates a Jira discovery task, and notifies the assigned sales rep via Slack.

naftiko: '0.5'
info:
  label: Salesforce Lead to Opportunity Conversion
  description: When a Salesforce lead reaches an MQL score threshold, converts it to an opportunity, creates a Jira discovery task, and notifies the assigned sales rep via Slack.
  tags:
  - sales
  - crm
  - salesforce
  - jira
  - slack
  - lead-qualification
capability:
  exposes:
  - type: mcp
    namespace: mql-conversion
    port: 8080
    tools:
    - name: convert-lead-to-opportunity
      description: Given a Salesforce lead ID, fetch lead details, create a converted Salesforce opportunity, open a Jira discovery task, and notify the sales rep on Slack. Use when an inbound MQL is ready for sales handoff.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead ID to convert (18-character SFDC ID).
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for the sales discovery task (e.g., 'SALES').
      - name: sales_rep_slack_id
        in: body
        type: string
        description: The Slack user ID of the assigned sales representative.
      steps:
      - name: get-lead
        type: call
        call: salesforce.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: create-opportunity
        type: call
        call: salesforce-opp.create-opportunity
        with:
          name: '{{get-lead.Company}} — {{get-lead.ProductInterest__c}}'
          stage: Prospecting
          close_date: '2026-09-30'
      - name: create-discovery-task
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: 'Discovery: {{get-lead.Company}} | {{get-lead.FirstName}} {{get-lead.LastName}}'
          description: 'New MQL converted. Lead: {{lead_id}}. SFDC Opportunity: {{create-opportunity.id}}.'
      - name: notify-sales-rep
        type: call
        call: slack.post-dm
        with:
          user_id: '{{sales_rep_slack_id}}'
          text: 'New Opportunity Created: {{get-lead.Company}} converted from lead. SFDC Opp: {{create-opportunity.id}} | Jira: {{create-discovery-task.key}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://oracle.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-opp
    baseUri: https://oracle.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://oracle.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: dm-messages
      path: /chat.postMessage
      operations:
      - name: post-dm
        method: POST
Open in Framework → View in Fleet → salesforce-lead-to-opportunity-conversion.yml

When a Tableau extract refresh fails, creates a Jira ticket for the analytics team, retries the refresh, and posts the failure to Slack.

naftiko: '0.5'
info:
  label: Tableau Report Failure Alert
  description: When a Tableau extract refresh fails, creates a Jira ticket for the analytics team, retries the refresh, and posts the failure to Slack.
  tags:
  - analytics
  - tableau
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: tableau-failure
    port: 8080
    tools:
    - name: handle-refresh-failure
      description: Given a failed Tableau extract refresh, create a Jira ticket, attempt retry, and notify the analytics team.
      inputParameters:
      - name: datasource_id
        in: body
        type: string
        description: The Tableau datasource ID.
      - name: datasource_name
        in: body
        type: string
        description: The datasource name.
      - name: error_message
        in: body
        type: string
        description: The refresh error message.
      steps:
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: ANALYTICS
          issuetype: Bug
          summary: '[Tableau] Extract refresh failed: {{datasource_name}}'
          description: 'Datasource: {{datasource_name}} ({{datasource_id}})

            Error: {{error_message}}'
      - name: retry-refresh
        type: call
        call: tableau-api.refresh-datasource
        with:
          datasource_id: '{{datasource_id}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: analytics-ops
          text: 'Tableau refresh failed: {{datasource_name}} | Error: {{error_message}} | Retry: {{retry-refresh.status}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.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: tableau-api
    baseUri: https://tableau.salesforce.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/default/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → tableau-report-failure-alert.yml

When a CPQ quote exceeds the discount threshold, routes for manager approval, updates the opportunity stage, and notifies deal desk via Slack.

naftiko: '0.5'
info:
  label: Salesforce CPQ Quote Approval
  description: When a CPQ quote exceeds the discount threshold, routes for manager approval, updates the opportunity stage, and notifies deal desk via Slack.
  tags:
  - crm
  - salesforce
  - slack
  - sales
capability:
  exposes:
  - type: mcp
    namespace: cpq-approval
    port: 8080
    tools:
    - name: route-quote-approval
      description: Given a Salesforce CPQ quote ID with a discount above threshold, route for approval and notify deal desk.
      inputParameters:
      - name: quote_id
        in: body
        type: string
        description: The Salesforce CPQ quote record ID.
      - name: discount_pct
        in: body
        type: number
        description: The discount percentage.
      steps:
      - name: get-quote
        type: call
        call: sfdc-api.get-quote
        with:
          quote_id: '{{quote_id}}'
      - name: submit-approval
        type: call
        call: sfdc-api.submit-for-approval
        with:
          record_id: '{{quote_id}}'
          comments: Discount of {{discount_pct}}% exceeds threshold. Requires manager approval.
      - name: notify-deal-desk
        type: call
        call: slack-api.post-message
        with:
          channel: deal-desk
          text: 'Quote approval needed: {{get-quote.Name}} | Account: {{get-quote.Account.Name}} | Discount: {{discount_pct}}% | Amount: ${{get-quote.TotalPrice}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: quotes
      path: /sobjects/SBQQ__Quote__c/{{quote_id}}
      inputParameters:
      - name: quote_id
        in: path
      operations:
      - name: get-quote
        method: GET
    - name: approvals
      path: /process/approvals
      operations:
      - name: submit-for-approval
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-cpq-quote-approval.yml

Generates a weekly Snowflake warehouse cost report, identifies top consumers, creates a Jira optimization task, and posts to Slack.

naftiko: '0.5'
info:
  label: Snowflake Cost Governance Report
  description: Generates a weekly Snowflake warehouse cost report, identifies top consumers, creates a Jira optimization task, and posts to Slack.
  tags:
  - finops
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: snowflake-costs
    port: 8080
    tools:
    - name: generate-cost-report
      description: Generate a Snowflake cost governance report, flag over-budget warehouses, create optimization tasks, and post to Slack.
      inputParameters:
      - name: budget_threshold
        in: body
        type: number
        description: The weekly budget threshold in credits.
      steps:
      - name: get-costs
        type: call
        call: snowflake-api.run-query
        with:
          budget_threshold: '{{budget_threshold}}'
      - name: create-task
        type: call
        call: jira-api.create-issue
        with:
          project: FINOPS
          issuetype: Task
          summary: '[Snowflake] Weekly cost review — {{get-costs.data.total_credits}} credits'
          description: 'Over budget: {{get-costs.data.over_budget_count}} warehouses'
      - name: post-report
        type: call
        call: slack-api.post-message
        with:
          channel: finops
          text: 'Snowflake Weekly Costs: {{get-costs.data.total_credits}} credits | Over budget: {{get-costs.data.over_budget_count}} warehouses | Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-cost-governance-report.yml

Queries GitHub for pull requests open beyond 48 hours without a review and sends a reminder to the PR author in Slack to follow up with reviewers.

naftiko: '0.5'
info:
  label: GitHub Pull Request Code Review Reminder
  description: Queries GitHub for pull requests open beyond 48 hours without a review and sends a reminder to the PR author in Slack to follow up with reviewers.
  tags:
  - devops
  - github
  - slack
  - code-review
  - developer-productivity
capability:
  exposes:
  - type: mcp
    namespace: devops-review
    port: 8080
    tools:
    - name: remind-stale-prs
      description: Given a GitHub repository and a staleness threshold in hours, find PRs without activity and send Slack reminders to the respective PR authors.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name to check for stale PRs.
      - name: threshold_hours
        in: body
        type: integer
        description: Number of hours without review before a PR is considered stale (e.g., 48).
      steps:
      - name: get-prs
        type: call
        call: github-review.list-open-prs
        with:
          repo: '{{repo}}'
      - name: send-reminder
        type: call
        call: slack-review.post-message
        with:
          channel: engineering
          text: 'Stale PRs in {{repo}} (open > {{threshold_hours}}h): {{get-prs.stalePrList}}. Please follow up with reviewers.'
  consumes:
  - type: http
    namespace: github-review
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{repo}}/pulls
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-open-prs
        method: GET
  - type: http
    namespace: slack-review
    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-pull-request-code-review-reminder.yml

When AWS Cost Explorer detects a spend anomaly, creates a Jira investigation ticket and alerts the FinOps team via Slack.

naftiko: '0.5'
info:
  label: AWS Cost Spike Investigation
  description: When AWS Cost Explorer detects a spend anomaly, creates a Jira investigation ticket and alerts the FinOps team via Slack.
  tags:
  - finops
  - aws
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cost-investigation
    port: 8080
    tools:
    - name: investigate-cost-spike
      description: Given an AWS cost anomaly alert, create a Jira ticket and notify the FinOps team.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The AWS account ID.
      - name: service_name
        in: body
        type: string
        description: The AWS service with the cost spike.
      - name: anomaly_amount
        in: body
        type: string
        description: The anomalous spend amount.
      steps:
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: FINOPS
          issuetype: Task
          summary: '[Cost Spike] ${{anomaly_amount}} on {{service_name}} in {{account_id}}'
          description: 'AWS cost anomaly detected.

            Account: {{account_id}}

            Service: {{service_name}}

            Anomaly: ${{anomaly_amount}}'
      - name: notify-finops
        type: call
        call: slack-api.post-message
        with:
          channel: finops
          text: 'AWS Cost Spike: ${{anomaly_amount}} on {{service_name}} in account {{account_id}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → aws-cost-spike-investigation.yml

When a new partner agreement is signed, creates a partner community user in Experience Cloud, provisions Okta access, and notifies via Slack.

naftiko: '0.5'
info:
  label: Salesforce Partner Portal Provisioning
  description: When a new partner agreement is signed, creates a partner community user in Experience Cloud, provisions Okta access, and notifies via Slack.
  tags:
  - crm
  - salesforce
  - salesforce-experience-cloud
  - okta
  - slack
capability:
  exposes:
  - type: mcp
    namespace: partner-provisioning
    port: 8080
    tools:
    - name: provision-partner
      description: Given a Salesforce partner account ID and contact, create a community user, provision Okta access, and send welcome message.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce partner account ID.
      - name: contact_id
        in: body
        type: string
        description: The partner contact ID.
      steps:
      - name: get-contact
        type: call
        call: sfdc-api.get-contact
        with:
          contact_id: '{{contact_id}}'
      - name: create-community-user
        type: call
        call: sfdc-api.create-user
        with:
          ContactId: '{{contact_id}}'
          ProfileId: partner_community_user
          Email: '{{get-contact.Email}}'
      - name: provision-okta
        type: call
        call: okta-api.create-user
        with:
          email: '{{get-contact.Email}}'
          firstName: '{{get-contact.FirstName}}'
          lastName: '{{get-contact.LastName}}'
      - name: welcome-message
        type: call
        call: slack-api.post-message
        with:
          channel: partner-operations
          text: 'New partner provisioned: {{get-contact.Name}} from {{account_id}} | Community: {{create-community-user.id}} | Okta: {{provision-okta.id}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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: users
      path: /sobjects/User
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: okta-api
    baseUri: https://salesforce.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-partner-portal-provisioning.yml

When a new lead is created in Salesforce CRM, enriches it with ZoomInfo firmographic data and updates the record with company size, industry, and revenue information.

naftiko: '0.5'
info:
  label: Salesforce CRM Lead Enrichment
  description: When a new lead is created in Salesforce CRM, enriches it with ZoomInfo firmographic data and updates the record with company size, industry, and revenue information.
  tags:
  - crm
  - sales
  - salesforce
  - zoominfo
  - lead-enrichment
capability:
  exposes:
  - type: mcp
    namespace: crm-enrichment
    port: 8080
    tools:
    - name: enrich-lead
      description: Given a Salesforce lead ID, retrieve ZoomInfo firmographic data for the lead's company and update the Salesforce record with enriched details. Use on new lead creation.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID to enrich.
      steps:
      - name: get-lead
        type: call
        call: sfdc-lead.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: sfdc-lead.update-lead
        with:
          lead_id: '{{lead_id}}'
          NumberOfEmployees: '{{enrich-company.employeeCount}}'
          Industry: '{{enrich-company.industry}}'
          AnnualRevenue: '{{enrich-company.revenue}}'
  consumes:
  - type: http
    namespace: sfdc-lead
    baseUri: https://salesforce.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: update-lead
        method: PATCH
  - 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
Open in Framework → View in Fleet → salesforce-crm-lead-enrichment.yml

Queries Snowflake for renewal pipeline health metrics, updates a Salesforce dashboard dataset, and posts a weekly summary to Slack.

naftiko: '0.5'
info:
  label: Salesforce Renewal Health Dashboard
  description: Queries Snowflake for renewal pipeline health metrics, updates a Salesforce dashboard dataset, and posts a weekly summary to Slack.
  tags:
  - crm
  - salesforce
  - snowflake
  - slack
  - renewals
capability:
  exposes:
  - type: mcp
    namespace: renewal-health
    port: 8080
    tools:
    - name: refresh-renewal-health
      description: Query renewal health metrics from Snowflake, update the Salesforce dashboard, and post a summary to Slack.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: The fiscal quarter for the report.
      steps:
      - name: get-metrics
        type: call
        call: snowflake-api.run-query
        with:
          fiscal_quarter: '{{fiscal_quarter}}'
      - name: update-dataset
        type: call
        call: sfdc-api.update-dataset
        with:
          dataset_name: Renewal_Health
          data: '{{get-metrics.data}}'
      - name: post-summary
        type: call
        call: slack-api.post-message
        with:
          channel: customer-success-leadership
          text: 'Renewal Health {{fiscal_quarter}} | Up for renewal: ${{get-metrics.data.total_arr}} | At risk: ${{get-metrics.data.at_risk_arr}} | Renewed: ${{get-metrics.data.renewed_arr}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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: sfdc-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: datasets
      path: /wave/datasets
      operations:
      - name: update-dataset
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-renewal-health-dashboard.yml

When AWS spend anomalies are detected, creates a Jira investigation ticket and alerts the cloud FinOps team in Slack with account and service details.

naftiko: '0.5'
info:
  label: Cloud Cost Anomaly Alert
  description: When AWS spend anomalies are detected, creates a Jira investigation ticket and alerts the cloud FinOps team in Slack with account and service details.
  tags:
  - cloud
  - finops
  - aws
  - jira
  - slack
  - cost-management
capability:
  exposes:
  - type: mcp
    namespace: cloud-finops
    port: 8080
    tools:
    - name: handle-cost-anomaly
      description: Given an AWS account ID, service name, and anomaly spend amount, create a Jira cost investigation ticket and notify the FinOps Slack channel.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The AWS account ID where the anomaly was detected.
      - name: service_name
        in: body
        type: string
        description: The AWS service with anomalous spend (e.g., EC2, Lambda).
      - name: anomaly_amount
        in: body
        type: number
        description: The unexpected spend amount in USD.
      steps:
      - name: create-jira-ticket
        type: call
        call: jira-finops.create-issue
        with:
          project_key: FINOPS
          issuetype: Task
          summary: 'AWS cost anomaly: ${{anomaly_amount}} on {{service_name}} in {{account_id}}'
          description: Investigate unexpected spend of ${{anomaly_amount}} on AWS {{service_name}} in account {{account_id}}.
      - name: alert-finops
        type: call
        call: slack-finops.post-message
        with:
          channel: cloud-cost-ops
          text: 'Cost anomaly: {{service_name}} in {{account_id}} — ${{anomaly_amount}} | Jira: {{create-jira-ticket.key}}'
  consumes:
  - type: http
    namespace: jira-finops
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-finops
    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 → cloud-cost-anomaly-alert.yml

Analyzes Salesforce case subjects against Knowledge articles to identify content gaps, creates Jira content tasks, and reports findings to Slack.

naftiko: '0.5'
info:
  label: Salesforce Knowledge Gap Analyzer
  description: Analyzes Salesforce case subjects against Knowledge articles to identify content gaps, creates Jira content tasks, and reports findings to Slack.
  tags:
  - crm
  - salesforce
  - jira
  - slack
  - knowledge-base
capability:
  exposes:
  - type: mcp
    namespace: knowledge-gap
    port: 8080
    tools:
    - name: analyze-gaps
      description: Given a date range, analyze case subjects vs. Knowledge articles to find gaps, create content tasks, and notify.
      inputParameters:
      - name: date_from
        in: body
        type: string
        description: Start date for analysis.
      - name: date_to
        in: body
        type: string
        description: End date for analysis.
      steps:
      - name: query-gaps
        type: call
        call: snowflake-api.run-query
        with:
          date_from: '{{date_from}}'
          date_to: '{{date_to}}'
      - name: create-task
        type: call
        call: jira-api.create-issue
        with:
          project: CONTENT
          issuetype: Task
          summary: '[KB Gap] {{query-gaps.data.top_gap_topic}} — {{query-gaps.data.case_count}} cases without articles'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: knowledge-management
          text: 'Knowledge gap found: {{query-gaps.data.top_gap_topic}} | Cases: {{query-gaps.data.case_count}} | Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-knowledge-gap-analyzer.yml

When a MuleSoft API version is scheduled for deprecation, identifies active consumers, creates Jira tickets for migration, and notifies impacted teams via Slack.

naftiko: '0.5'
info:
  label: MuleSoft API Deprecation Notification
  description: When a MuleSoft API version is scheduled for deprecation, identifies active consumers, creates Jira tickets for migration, and notifies impacted teams via Slack.
  tags:
  - integration
  - mulesoft
  - jira
  - slack
  - api-management
capability:
  exposes:
  - type: mcp
    namespace: api-deprecation
    port: 8080
    tools:
    - name: notify-deprecation
      description: Given a MuleSoft API ID being deprecated, identify consumers, create migration tickets, and notify teams.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: The MuleSoft API instance ID being deprecated.
      - name: deprecation_date
        in: body
        type: string
        description: The deprecation date.
      - name: successor_api_id
        in: body
        type: string
        description: The successor API instance ID.
      steps:
      - name: get-consumers
        type: call
        call: mulesoft-api.get-contracts
        with:
          api_id: '{{api_id}}'
      - name: create-migration-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: INTEGRATION
          issuetype: Task
          summary: '[API Migration] {{api_id}} deprecating {{deprecation_date}}'
          description: 'API {{api_id}} is being deprecated on {{deprecation_date}}. Migrate to {{successor_api_id}}. Active consumers: {{get-consumers.total}}'
      - name: notify-teams
        type: call
        call: slack-api.post-message
        with:
          channel: api-platform
          text: 'API Deprecation: {{api_id}} retiring {{deprecation_date}} | Consumers: {{get-consumers.total}} | Migrate to: {{successor_api_id}} | Jira: {{create-migration-ticket.key}}'
  consumes:
  - type: http
    namespace: mulesoft-api
    baseUri: https://anypoint.mulesoft.com/apimanager/api/v1
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: contracts
      path: /organizations/$secrets.mulesoft_org_id/environments/$secrets.mulesoft_env_id/apis/{{api_id}}/contracts
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-contracts
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → mulesoft-api-deprecation-notification.yml

When GitHub code scanning finds a high-severity issue, creates a Jira security task, assigns it to the code owner, and notifies the AppSec team via Slack.

naftiko: '0.5'
info:
  label: GitHub Code Scanning to Jira Workflow
  description: When GitHub code scanning finds a high-severity issue, creates a Jira security task, assigns it to the code owner, and notifies the AppSec team via Slack.
  tags:
  - security
  - github
  - jira
  - slack
  - appsec
capability:
  exposes:
  - type: mcp
    namespace: code-scanning
    port: 8080
    tools:
    - name: handle-code-scan-alert
      description: Given a GitHub code scanning alert, create a Jira task, assign to the code owner, and notify AppSec.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      - name: alert_number
        in: body
        type: string
        description: The code scanning alert number.
      steps:
      - name: get-alert
        type: call
        call: github-api.get-code-scanning-alert
        with:
          repo: '{{repo}}'
          alert_number: '{{alert_number}}'
      - name: create-task
        type: call
        call: jira-api.create-issue
        with:
          project: APPSEC
          issuetype: Bug
          summary: '[CodeQL] {{get-alert.rule.description}} in {{repo}}'
          description: 'Code scanning alert in {{repo}}.

            Rule: {{get-alert.rule.id}}

            Severity: {{get-alert.rule.security_severity_level}}

            File: {{get-alert.most_recent_instance.location.path}}'
      - name: notify-appsec
        type: call
        call: slack-api.post-message
        with:
          channel: appsec
          text: 'Code scan alert: {{get-alert.rule.description}} in {{repo}} | Severity: {{get-alert.rule.security_severity_level}} | Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: code-scanning
      path: /repos/salesforce/{{repo}}/code-scanning/alerts/{{alert_number}}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-code-scanning-alert
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-code-scanning-to-jira-workflow.yml

When a Salesforce opportunity stage advances to Closed Won, posts a deal alert to the #wins Slack channel with deal value and account details.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to Slack Deal Alert
  description: 'When a Salesforce opportunity stage advances to Closed Won, posts a deal alert to the #wins Slack channel with deal value and account details.'
  tags:
  - crm
  - sales
  - salesforce
  - slack
  - deal-tracking
capability:
  exposes:
  - type: mcp
    namespace: crm-deals
    port: 8080
    tools:
    - name: announce-closed-won
      description: Given a Salesforce opportunity ID, retrieve deal details and post a formatted Closed Won announcement to the team Slack channel. Use when an opportunity is marked Closed Won.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity record ID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel name to post the deal announcement to.
      steps:
      - name: get-opportunity
        type: call
        call: sfdc-opp.get-opportunity
        with:
          opp_id: '{{opportunity_id}}'
      - name: post-announcement
        type: call
        call: slack-deals.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Closed Won! {{get-opportunity.Name}} — ${{get-opportunity.Amount}} | Account: {{get-opportunity.AccountName}} | Owner: {{get-opportunity.OwnerName}}'
  consumes:
  - type: http
    namespace: sfdc-opp
    baseUri: https://salesforce.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
  - type: http
    namespace: slack-deals
    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 → salesforce-opportunity-to-slack-deal-alert.yml

Retrieves current SLO burn rates from Datadog and posts a weekly compliance digest to the engineering leadership Slack channel.

naftiko: '0.5'
info:
  label: Datadog SLO Compliance Digest
  description: Retrieves current SLO burn rates from Datadog and posts a weekly compliance digest to the engineering leadership Slack channel.
  tags:
  - observability
  - datadog
  - slack
  - slo
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: observability-reporting
    port: 8080
    tools:
    - name: digest-slo-compliance
      description: Retrieve all active SLO compliance percentages from Datadog and post a formatted weekly digest to the Slack engineering leadership channel.
      inputParameters:
      - name: slo_tag
        in: body
        type: string
        description: A Datadog tag to filter SLOs by (e.g., team:platform).
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to post the digest to.
      steps:
      - name: get-slos
        type: call
        call: datadog-slo.list-slos
        with:
          tags_query: '{{slo_tag}}'
      - name: post-digest
        type: call
        call: slack-slo.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Weekly SLO digest for {{slo_tag}}: {{get-slos.summary}}'
  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: slack-slo
    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 → datadog-slo-compliance-digest.yml

Retrieves detailed account information from Salesforce including industry, annual revenue, and owner for quick reference.

naftiko: '0.5'
info:
  label: Salesforce Account Detail Lookup
  description: Retrieves detailed account information from Salesforce including industry, annual revenue, and owner for quick reference.
  tags:
  - crm
  - salesforce
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: sfdc-accounts
    port: 8080
    tools:
    - name: get-account
      description: Given a Salesforce account ID, return account name, industry, annual revenue, owner, and status. Use for account lookups and pre-call preparation.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account record ID.
      call: sfdc-account.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: sfdc-account
    baseUri: https://salesforce.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-detail-lookup.yml

When duplicate accounts are detected, merges records in Salesforce, updates related contacts, and logs the merge in Snowflake for audit.

naftiko: '0.5'
info:
  label: Salesforce Account Merge Deduplication
  description: When duplicate accounts are detected, merges records in Salesforce, updates related contacts, and logs the merge in Snowflake for audit.
  tags:
  - crm
  - salesforce
  - snowflake
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: account-dedup
    port: 8080
    tools:
    - name: merge-duplicate-accounts
      description: Given a master and duplicate Salesforce account ID, merge the records and log to Snowflake for audit.
      inputParameters:
      - name: master_account_id
        in: body
        type: string
        description: The master Salesforce account ID to keep.
      - name: duplicate_account_id
        in: body
        type: string
        description: The duplicate Salesforce account ID to merge.
      steps:
      - name: get-master
        type: call
        call: sfdc-api.get-account
        with:
          account_id: '{{master_account_id}}'
      - name: merge-accounts
        type: call
        call: sfdc-api.merge-records
        with:
          master_id: '{{master_account_id}}'
          duplicate_id: '{{duplicate_account_id}}'
      - name: log-merge
        type: call
        call: snowflake-api.run-query
        with:
          master_id: '{{master_account_id}}'
          duplicate_id: '{{duplicate_account_id}}'
          master_name: '{{get-master.Name}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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
    - name: merge
      path: /sobjects/Account/{{master_id}}/merge
      inputParameters:
      - name: master_id
        in: path
      operations:
      - name: merge-records
        method: POST
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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 → salesforce-account-merge-deduplication.yml

When a DocuSign envelope is completed, updates the Salesforce opportunity to Closed Won and posts a notification to Slack.

naftiko: '0.5'
info:
  label: DocuSign Contract to Salesforce Update
  description: When a DocuSign envelope is completed, updates the Salesforce opportunity to Closed Won and posts a notification to Slack.
  tags:
  - legal
  - docusign
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: contract-close
    port: 8080
    tools:
    - name: handle-contract-signed
      description: Given a completed DocuSign envelope, update the linked Salesforce opportunity to Closed Won and notify via Slack.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope ID.
      - name: opportunity_id
        in: body
        type: string
        description: The linked Salesforce opportunity ID.
      steps:
      - name: get-envelope
        type: call
        call: docusign-api.get-envelope
        with:
          envelope_id: '{{envelope_id}}'
      - name: update-opp
        type: call
        call: sfdc-api.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          StageName: Closed Won
          Contract_Signed_Date__c: '{{get-envelope.completedDateTime}}'
      - name: notify-sales
        type: call
        call: slack-api.post-message
        with:
          channel: deal-wins
          text: Contract signed! Envelope {{envelope_id}} completed. Opportunity {{opportunity_id}} moved to Closed Won.
  consumes:
  - type: http
    namespace: docusign-api
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /accounts/$secrets.docusign_account_id/envelopes/{{envelope_id}}
      inputParameters:
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → docusign-contract-to-salesforce-update.yml

When Workday payroll processing shows a variance above threshold, queries Snowflake for historical comparison, creates a Jira ticket, and alerts finance via Slack.

naftiko: '0.5'
info:
  label: Workday Payroll Variance Alert
  description: When Workday payroll processing shows a variance above threshold, queries Snowflake for historical comparison, creates a Jira ticket, and alerts finance via Slack.
  tags:
  - hr
  - workday
  - snowflake
  - jira
  - slack
  - finance
capability:
  exposes:
  - type: mcp
    namespace: payroll-variance
    port: 8080
    tools:
    - name: handle-payroll-variance
      description: Given a Workday payroll variance alert, pull historical data from Snowflake, create a Jira ticket, and notify finance.
      inputParameters:
      - name: pay_period
        in: body
        type: string
        description: The pay period identifier.
      - name: variance_pct
        in: body
        type: number
        description: Variance percentage from expected.
      - name: variance_amount
        in: body
        type: string
        description: Dollar amount of the variance.
      steps:
      - name: get-historical
        type: call
        call: snowflake-api.run-query
        with:
          pay_period: '{{pay_period}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: FINANCE
          issuetype: Task
          summary: '[Payroll Variance] {{pay_period}} — ${{variance_amount}} ({{variance_pct}}%)'
          description: 'Payroll variance detected for {{pay_period}}.

            Variance: ${{variance_amount}} ({{variance_pct}}%)

            Historical avg: ${{get-historical.data.avg_amount}}'
      - name: alert-finance
        type: call
        call: slack-api.post-message
        with:
          channel: finance-ops
          text: 'Payroll Variance: {{pay_period}} | ${{variance_amount}} ({{variance_pct}}%) | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-payroll-variance-alert.yml

Extracts KPI data from a Power BI dataset, updates custom KPI fields in Salesforce accounts, and posts a sync summary to Slack.

naftiko: '0.5'
info:
  label: Power BI to Salesforce KPI Sync
  description: Extracts KPI data from a Power BI dataset, updates custom KPI fields in Salesforce accounts, and posts a sync summary to Slack.
  tags:
  - analytics
  - power-bi
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: kpi-sync
    port: 8080
    tools:
    - name: sync-kpis
      description: Given a Power BI dataset ID and Salesforce account segment, sync KPI values and notify via Slack.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID.
      - name: account_segment
        in: body
        type: string
        description: The Salesforce account segment to update.
      steps:
      - name: get-kpis
        type: call
        call: powerbi-api.get-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: update-accounts
        type: call
        call: sfdc-api.bulk-update
        with:
          segment: '{{account_segment}}'
          kpi_data: '{{get-kpis.data}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: revenue-ops
          text: 'KPI sync complete | Dataset: {{dataset_id}} | Segment: {{account_segment}} | Accounts updated: {{update-accounts.count}}'
  consumes:
  - type: http
    namespace: powerbi-api
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: datasets
      path: /datasets/{{dataset_id}}/executeQueries
      inputParameters:
      - name: dataset_id
        in: path
      operations:
      - name: get-dataset
        method: POST
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: composite
      path: /composite/sobjects
      operations:
      - name: bulk-update
        method: PATCH
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → power-bi-to-salesforce-kpi-sync.yml

When a ServiceNow change request is submitted, validates the change window, assigns approvers from the CMDB, and notifies the CAB via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Approval Workflow
  description: When a ServiceNow change request is submitted, validates the change window, assigns approvers from the CMDB, and notifies the CAB via Slack.
  tags:
  - operations
  - servicenow
  - slack
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: change-approval
    port: 8080
    tools:
    - name: process-change-request
      description: Given a ServiceNow change request number, validate the window, assign approvers, and notify the CAB.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: The ServiceNow change request number.
      steps:
      - name: get-change
        type: call
        call: servicenow-api.get-change
        with:
          change_number: '{{change_number}}'
      - name: get-ci-owner
        type: call
        call: servicenow-api.get-ci
        with:
          ci_id: '{{get-change.cmdb_ci}}'
      - name: assign-approver
        type: call
        call: servicenow-api.update-change
        with:
          change_number: '{{change_number}}'
          assigned_to: '{{get-ci-owner.owned_by}}'
      - name: notify-cab
        type: call
        call: slack-api.post-message
        with:
          channel: change-advisory-board
          text: 'Change Request: {{change_number}} | {{get-change.short_description}} | Approver: {{get-ci-owner.owned_by}}'
  consumes:
  - type: http
    namespace: servicenow-api
    baseUri: https://salesforce.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
      - name: update-change
        method: PATCH
    - name: ci
      path: /table/cmdb_ci/{{ci_id}}
      inputParameters:
      - name: ci_id
        in: path
      operations:
      - name: get-ci
        method: GET
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-request-approval-workflow.yml

Searches Salesforce Knowledge articles by keyword and returns the top matching article title, summary, and URL.

naftiko: '0.5'
info:
  label: Salesforce Knowledge Article Search
  description: Searches Salesforce Knowledge articles by keyword and returns the top matching article title, summary, and URL.
  tags:
  - crm
  - salesforce
  - knowledge-base
capability:
  exposes:
  - type: mcp
    namespace: sfdc-knowledge
    port: 8080
    tools:
    - name: search-articles
      description: Given a search keyword, return matching Salesforce Knowledge articles with title, summary, and URL. Use for support agent assist.
      inputParameters:
      - name: query
        in: body
        type: string
        description: The search keyword or phrase.
      call: sfdc-kb.search
      with:
        query: '{{query}}'
      outputParameters:
      - name: articles
        type: array
        mapping: $.searchRecords
  consumes:
  - type: http
    namespace: sfdc-kb
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: search
      path: /search?q=FIND+{{query}}+IN+ALL+FIELDS+RETURNING+KnowledgeArticleVersion
      inputParameters:
      - name: query
        in: path
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → salesforce-knowledge-article-search.yml

When a customer submits a low NPS score, creates a follow-up task in Salesforce, notifies the CSM via Slack, and logs the feedback in Snowflake.

naftiko: '0.5'
info:
  label: Salesforce NPS Survey Follow-Up
  description: When a customer submits a low NPS score, creates a follow-up task in Salesforce, notifies the CSM via Slack, and logs the feedback in Snowflake.
  tags:
  - crm
  - salesforce
  - slack
  - snowflake
  - customer-success
capability:
  exposes:
  - type: mcp
    namespace: nps-followup
    port: 8080
    tools:
    - name: handle-low-nps
      description: Given a Salesforce account with a low NPS response, create a follow-up task, notify the CSM, and log to Snowflake.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      - name: nps_score
        in: body
        type: number
        description: The NPS score submitted.
      - name: feedback
        in: body
        type: string
        description: Customer feedback text.
      steps:
      - name: get-account
        type: call
        call: sfdc-api.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-task
        type: call
        call: sfdc-api.create-task
        with:
          Subject: 'NPS Follow-Up: {{get-account.Name}} (Score: {{nps_score}})'
          WhatId: '{{account_id}}'
          Priority: High
      - name: notify-csm
        type: call
        call: slack-api.post-message
        with:
          channel: customer-success
          text: 'Low NPS Alert: {{get-account.Name}} scored {{nps_score}} | Feedback: {{feedback}} | Task: {{create-task.id}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-nps-survey-follow-up.yml

Queries Snowflake for customer churn metrics by product line and time period.

naftiko: '0.5'
info:
  label: Snowflake Customer Churn Query
  description: Queries Snowflake for customer churn metrics by product line and time period.
  tags:
  - analytics
  - snowflake
  - customer-success
capability:
  exposes:
  - type: mcp
    namespace: churn-analytics
    port: 8080
    tools:
    - name: get-churn-metrics
      description: Given a product line and time period, return churn rate, at-risk account count, and net retention from Snowflake.
      inputParameters:
      - name: product_line
        in: body
        type: string
        description: Product line name (e.g., Sales Cloud, Service Cloud).
      - name: period
        in: body
        type: string
        description: Time period (e.g., Q3_FY24).
      call: snowflake-churn.run-query
      with:
        product_line: '{{product_line}}'
        period: '{{period}}'
      outputParameters:
      - name: churn_rate
        type: number
        mapping: $.data[0].churn_rate
      - name: at_risk_accounts
        type: number
        mapping: $.data[0].at_risk_count
      - name: net_retention
        type: number
        mapping: $.data[0].net_retention_pct
  consumes:
  - type: http
    namespace: snowflake-churn
    baseUri: https://salesforce.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-customer-churn-query.yml

Returns current status, stage, amount, and account details for a Salesforce CRM opportunity by ID. A quick lookup for agent and human sales review.

naftiko: '0.5'
info:
  label: Salesforce CRM Opportunity Lookup
  description: Returns current status, stage, amount, and account details for a Salesforce CRM opportunity by ID. A quick lookup for agent and human sales review.
  tags:
  - crm
  - sales
  - salesforce
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: crm-lookup
    port: 8080
    tools:
    - name: get-opportunity
      description: Given a Salesforce opportunity ID, return its current stage, amount, close date, account name, and owner. Use for pre-meeting briefing or opportunity health checks.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity record ID.
      call: sfdc-lookup.get-opportunity
      with:
        opp_id: '{{opportunity_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.Name
      - name: stage
        type: string
        mapping: $.StageName
      - name: amount
        type: string
        mapping: $.Amount
      - name: close_date
        type: string
        mapping: $.CloseDate
      - name: account_name
        type: string
        mapping: $.Account.Name
  consumes:
  - type: http
    namespace: sfdc-lookup
    baseUri: https://salesforce.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-crm-opportunity-lookup.yml

When community engagement drops below threshold, queries analytics from Snowflake, creates a Salesforce task for the community manager, and notifies via Slack.

naftiko: '0.5'
info:
  label: Salesforce Experience Cloud Community Alert
  description: When community engagement drops below threshold, queries analytics from Snowflake, creates a Salesforce task for the community manager, and notifies via Slack.
  tags:
  - crm
  - salesforce
  - salesforce-experience-cloud
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: community-alert
    port: 8080
    tools:
    - name: handle-engagement-drop
      description: Given a community engagement drop alert, query analytics, create a follow-up task, and notify the community team.
      inputParameters:
      - name: community_id
        in: body
        type: string
        description: The Experience Cloud community ID.
      - name: current_engagement
        in: body
        type: number
        description: Current engagement score.
      steps:
      - name: query-analytics
        type: call
        call: snowflake-api.run-query
        with:
          community_id: '{{community_id}}'
      - name: create-task
        type: call
        call: sfdc-api.create-task
        with:
          Subject: 'Community engagement drop: {{community_id}}'
          Priority: High
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: community-ops
          text: 'Engagement drop: community {{community_id}} at {{current_engagement}} | Task: {{create-task.id}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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: sfdc-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-experience-cloud-community-alert.yml

Queries Snowflake for quarterly revenue breakdown by region for financial reporting.

naftiko: '0.5'
info:
  label: Snowflake Revenue by Region Query
  description: Queries Snowflake for quarterly revenue breakdown by region for financial reporting.
  tags:
  - analytics
  - snowflake
  - finance
capability:
  exposes:
  - type: mcp
    namespace: finance-analytics
    port: 8080
    tools:
    - name: get-revenue-by-region
      description: Given a fiscal quarter, return revenue broken down by region from Snowflake. Use for quarterly business reviews.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter in format FYQ (e.g., FY24Q3).
      call: snowflake-revenue.run-query
      with:
        fiscal_quarter: '{{fiscal_quarter}}'
      outputParameters:
      - name: results
        type: object
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake-revenue
    baseUri: https://salesforce.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-revenue-by-region-query.yml

When Okta detects a suspicious login event, creates a Jira security incident and notifies the security operations Slack channel for immediate investigation.

naftiko: '0.5'
info:
  label: Okta Suspicious Login Alert
  description: When Okta detects a suspicious login event, creates a Jira security incident and notifies the security operations Slack channel for immediate investigation.
  tags:
  - security
  - okta
  - jira
  - slack
  - identity
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: security-identity
    port: 8080
    tools:
    - name: handle-suspicious-login
      description: Given an Okta user ID and suspicious event type, retrieve the event details, create a Jira security incident, and alert the SOC in Slack.
      inputParameters:
      - name: okta_user_id
        in: body
        type: string
        description: The Okta user ID associated with the suspicious login.
      - name: event_type
        in: body
        type: string
        description: The Okta system log event type (e.g., user.session.start).
      - name: ip_address
        in: body
        type: string
        description: The IP address of the suspicious login attempt.
      steps:
      - name: get-user
        type: call
        call: okta-sec.get-user
        with:
          userId: '{{okta_user_id}}'
      - name: create-incident
        type: call
        call: jira-login.create-issue
        with:
          project_key: SEC
          issuetype: Security Incident
          summary: 'Suspicious login: {{get-user.login}} from {{ip_address}}'
          description: 'User: {{get-user.login}}

            Event: {{event_type}}

            IP: {{ip_address}}'
      - name: alert-soc
        type: call
        call: slack-login.post-message
        with:
          channel: security-ops
          text: 'Suspicious login detected for {{get-user.login}} from {{ip_address}} ({{event_type}}) | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: okta-sec
    baseUri: https://salesforce.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{userId}}
      inputParameters:
      - name: userId
        in: path
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: jira-login
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-login
    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 → okta-suspicious-login-alert.yml

When an Einstein Bot conversation exceeds the frustration threshold, transfers to a live agent, creates a Salesforce case, and logs the interaction in Snowflake.

naftiko: '0.5'
info:
  label: Salesforce Einstein Bot Escalation
  description: When an Einstein Bot conversation exceeds the frustration threshold, transfers to a live agent, creates a Salesforce case, and logs the interaction in Snowflake.
  tags:
  - crm
  - salesforce
  - salesforce-einstein
  - snowflake
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: bot-escalation
    port: 8080
    tools:
    - name: escalate-bot-conversation
      description: Given a bot conversation ID with high frustration, escalate to live agent, create a case, and log the interaction.
      inputParameters:
      - name: conversation_id
        in: body
        type: string
        description: The Einstein Bot conversation ID.
      - name: customer_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: frustration_score
        in: body
        type: number
        description: The customer frustration score.
      steps:
      - name: get-conversation
        type: call
        call: sfdc-api.get-conversation
        with:
          conversation_id: '{{conversation_id}}'
      - name: create-case
        type: call
        call: sfdc-api.create-case
        with:
          ContactId: '{{customer_id}}'
          Subject: Bot escalation — frustration score {{frustration_score}}
          Priority: High
      - name: log-interaction
        type: call
        call: snowflake-api.run-query
        with:
          conversation_id: '{{conversation_id}}'
          frustration_score: '{{frustration_score}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: conversations
      path: /connect/conversations/{{conversation_id}}
      inputParameters:
      - name: conversation_id
        in: path
      operations:
      - name: get-conversation
        method: GET
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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 → salesforce-einstein-bot-escalation.yml

Assesses opportunity risk by querying engagement data from Snowflake, updates the risk score in Salesforce, and alerts the sales manager via Slack.

naftiko: '0.5'
info:
  label: Salesforce Opportunity Risk Assessment
  description: Assesses opportunity risk by querying engagement data from Snowflake, updates the risk score in Salesforce, and alerts the sales manager via Slack.
  tags:
  - crm
  - salesforce
  - snowflake
  - slack
  - sales-analytics
capability:
  exposes:
  - type: mcp
    namespace: opp-risk
    port: 8080
    tools:
    - name: assess-opportunity-risk
      description: Given a Salesforce opportunity ID, query engagement signals from Snowflake, update the risk score, and alert the manager.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity record ID.
      steps:
      - name: get-opp
        type: call
        call: sfdc-api.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: get-engagement
        type: call
        call: snowflake-api.run-query
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: update-risk
        type: call
        call: sfdc-api.update-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
          Risk_Score__c: '{{get-engagement.data.risk_score}}'
      - name: alert-manager
        type: call
        call: slack-api.post-message
        with:
          channel: sales-managers
          text: 'At-risk deal: {{get-opp.Name}} (${{get-opp.Amount}}) | Risk score: {{get-engagement.data.risk_score}} | Last activity: {{get-engagement.data.last_activity_days}} days ago'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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: snowflake-api
    baseUri: https://salesforce.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: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-opportunity-risk-assessment.yml

When a competitor is added to a Salesforce opportunity, retrieves competitive intelligence from Snowflake and alerts the sales enablement team via Slack.

naftiko: '0.5'
info:
  label: Salesforce Competitive Deal Alert
  description: When a competitor is added to a Salesforce opportunity, retrieves competitive intelligence from Snowflake and alerts the sales enablement team via Slack.
  tags:
  - crm
  - salesforce
  - snowflake
  - slack
  - competitive-intelligence
capability:
  exposes:
  - type: mcp
    namespace: competitive-alert
    port: 8080
    tools:
    - name: handle-competitor-added
      description: Given a Salesforce opportunity with a new competitor, retrieve competitive intel and alert the enablement team.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: The Salesforce opportunity ID.
      - name: competitor_name
        in: body
        type: string
        description: The competitor name.
      steps:
      - name: get-opp
        type: call
        call: sfdc-api.get-opportunity
        with:
          opportunity_id: '{{opportunity_id}}'
      - name: get-intel
        type: call
        call: snowflake-api.run-query
        with:
          competitor: '{{competitor_name}}'
      - name: alert-enablement
        type: call
        call: slack-api.post-message
        with:
          channel: sales-enablement
          text: 'Competitive deal alert: {{get-opp.Name}} (${{get-opp.Amount}}) | Competitor: {{competitor_name}} | Win rate: {{get-intel.data.win_rate}}% | Owner: {{get-opp.Owner.Name}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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: snowflake-api
    baseUri: https://salesforce.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: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-competitive-deal-alert.yml

When GitHub Advanced Security detects a critical vulnerability, creates a ServiceNow security incident, assigns the owning team, and alerts via Slack.

naftiko: '0.5'
info:
  label: GitHub Security Alert to ServiceNow Incident
  description: When GitHub Advanced Security detects a critical vulnerability, creates a ServiceNow security incident, assigns the owning team, and alerts via Slack.
  tags:
  - security
  - github
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: security-alert
    port: 8080
    tools:
    - name: handle-security-alert
      description: Given a GitHub security alert for a critical vulnerability, create a ServiceNow incident and notify the security team via Slack.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      - name: alert_number
        in: body
        type: string
        description: The GitHub security alert number.
      - name: vulnerability
        in: body
        type: string
        description: CVE or vulnerability identifier.
      steps:
      - name: get-alert
        type: call
        call: github-api.get-alert
        with:
          repo: '{{repo}}'
          alert_number: '{{alert_number}}'
      - name: create-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: '[Critical] {{vulnerability}} in {{repo}}'
          description: 'GitHub security alert #{{alert_number}} in {{repo}}.

            Vulnerability: {{vulnerability}}

            Severity: {{get-alert.severity}}

            Package: {{get-alert.dependency.package.name}}'
          category: security
          urgency: '1'
      - name: notify-security
        type: call
        call: slack-api.post-message
        with:
          channel: security-ops
          text: 'Critical vulnerability: {{vulnerability}} in {{repo}} | SNOW: {{create-incident.number}} | Package: {{get-alert.dependency.package.name}}'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: alerts
      path: /repos/salesforce/{{repo}}/dependabot/alerts/{{alert_number}}
      inputParameters:
      - name: repo
        in: path
      - name: alert_number
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://salesforce.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: incidents
      path: /table/incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-security-alert-to-servicenow-incident.yml

When an employee's role changes in Workday, updates their Okta group memberships to reflect the new role's access profile and removes stale permissions.

naftiko: '0.5'
info:
  label: Workday Role Change Access Sync
  description: When an employee's role changes in Workday, updates their Okta group memberships to reflect the new role's access profile and removes stale permissions.
  tags:
  - hr
  - identity
  - workday
  - okta
  - access-management
  - role-change
capability:
  exposes:
  - type: mcp
    namespace: hr-access-sync
    port: 8080
    tools:
    - name: sync-role-change-access
      description: Given a Workday employee ID and new role, update Okta group memberships to match the new access profile and notify IT Ops in Slack.
      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 or role name.
      - name: old_role
        in: body
        type: string
        description: The previous job title or role name.
      steps:
      - name: get-employee
        type: call
        call: workday-sync.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: update-okta-groups
        type: call
        call: okta-sync.update-user-profile
        with:
          userId: '{{get-employee.oktaId}}'
          department: '{{get-employee.department}}'
          title: '{{new_role}}'
      - name: notify-it
        type: call
        call: slack-sync.post-message
        with:
          channel: it-access-reviews
          text: 'Role change for {{get-employee.displayName}}: {{old_role}} → {{new_role}}. Okta profile updated.'
  consumes:
  - type: http
    namespace: workday-sync
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /salesforce/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-sync
    baseUri: https://salesforce.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_api_token
      placement: header
    resources:
    - name: users
      path: /users/{{userId}}
      inputParameters:
      - name: userId
        in: path
      operations:
      - name: update-user-profile
        method: POST
  - type: http
    namespace: slack-sync
    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 → workday-role-change-access-sync.yml

When a Datadog synthetic test fails, retrieves test results, creates a Jira incident ticket, and posts diagnostic details to the Slack ops channel.

naftiko: '0.5'
info:
  label: Datadog Synthetics Failure Handler
  description: When a Datadog synthetic test fails, retrieves test results, creates a Jira incident ticket, and posts diagnostic details to the Slack ops channel.
  tags:
  - observability
  - datadog
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: synthetics-handler
    port: 8080
    tools:
    - name: handle-synthetic-failure
      description: Given a failed Datadog synthetic test, retrieve results, create a Jira ticket, and notify ops.
      inputParameters:
      - name: test_id
        in: body
        type: string
        description: The Datadog synthetic test ID.
      - name: test_name
        in: body
        type: string
        description: The synthetic test name.
      - name: failure_message
        in: body
        type: string
        description: The failure message.
      steps:
      - name: get-test-results
        type: call
        call: datadog-api.get-test-results
        with:
          test_id: '{{test_id}}'
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: OPS
          issuetype: Bug
          summary: '[Synthetic Failure] {{test_name}}'
          description: 'Synthetic test {{test_name}} ({{test_id}}) failed.

            Error: {{failure_message}}'
      - name: notify-ops
        type: call
        call: slack-api.post-message
        with:
          channel: platform-ops
          text: 'Synthetic failure: {{test_name}} | Error: {{failure_message}} | Jira: {{create-ticket.key}}'
  consumes:
  - type: http
    namespace: datadog-api
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: synthetics
      path: /synthetics/tests/{{test_id}}/results
      inputParameters:
      - name: test_id
        in: path
      operations:
      - name: get-test-results
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-synthetics-failure-handler.yml

Sixty days before contract expiration, retrieves contract details from Salesforce, creates a renewal opportunity, and notifies the account team via Slack.

naftiko: '0.5'
info:
  label: Salesforce Contract Renewal Reminder
  description: Sixty days before contract expiration, retrieves contract details from Salesforce, creates a renewal opportunity, and notifies the account team via Slack.
  tags:
  - crm
  - salesforce
  - slack
  - renewals
capability:
  exposes:
  - type: mcp
    namespace: contract-renewals
    port: 8080
    tools:
    - name: trigger-renewal-reminder
      description: Given a Salesforce contract ID approaching expiration, create a renewal opportunity and notify the account team via Slack.
      inputParameters:
      - name: contract_id
        in: body
        type: string
        description: The Salesforce contract record ID.
      steps:
      - name: get-contract
        type: call
        call: sfdc-contract.get-contract
        with:
          contract_id: '{{contract_id}}'
      - name: create-renewal-opp
        type: call
        call: sfdc-contract.create-opportunity
        with:
          Name: Renewal - {{get-contract.Account.Name}}
          AccountId: '{{get-contract.AccountId}}'
          StageName: Qualification
          CloseDate: '{{get-contract.EndDate}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: renewals
          text: 'Contract renewal due: {{get-contract.Account.Name}} | Expires: {{get-contract.EndDate}} | Renewal Opp: {{create-renewal-opp.id}}'
  consumes:
  - type: http
    namespace: sfdc-contract
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contracts
      path: /sobjects/Contract/{{contract_id}}
      inputParameters:
      - name: contract_id
        in: path
      operations:
      - name: get-contract
        method: GET
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-contract-renewal-reminder.yml

Returns the topic, start time, duration, and participant count for a Zoom meeting by meeting ID.

naftiko: '0.5'
info:
  label: Zoom Meeting Details Lookup
  description: Returns the topic, start time, duration, and participant count for a Zoom meeting by meeting ID.
  tags:
  - communications
  - zoom
  - meetings
capability:
  exposes:
  - type: mcp
    namespace: zoom-meetings
    port: 8080
    tools:
    - name: get-meeting-details
      description: Given a Zoom meeting ID, return the topic, start time, duration, and participant count.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting ID.
      call: zoom-api.get-meeting
      with:
        meeting_id: '{{meeting_id}}'
      outputParameters:
      - name: topic
        type: string
        mapping: $.topic
      - name: start_time
        type: string
        mapping: $.start_time
      - name: duration
        type: number
        mapping: $.duration
  consumes:
  - type: http
    namespace: zoom-api
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: meetings
      path: /meetings/{{meeting_id}}
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting
        method: GET
Open in Framework → View in Fleet → zoom-meeting-details-lookup.yml

When Terraform Cloud detects infrastructure drift, creates a Jira ticket for review, notifies the platform team via Slack, and triggers a plan run.

naftiko: '0.5'
info:
  label: Terraform Drift Detection and Remediation
  description: When Terraform Cloud detects infrastructure drift, creates a Jira ticket for review, notifies the platform team via Slack, and triggers a plan run.
  tags:
  - infrastructure
  - terraform
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: drift-remediation
    port: 8080
    tools:
    - name: handle-drift
      description: Given a Terraform workspace with detected drift, create a Jira ticket, notify the platform team, and trigger a plan.
      inputParameters:
      - name: workspace_id
        in: body
        type: string
        description: The Terraform Cloud workspace ID.
      - name: workspace_name
        in: body
        type: string
        description: The Terraform Cloud workspace name.
      - name: drift_summary
        in: body
        type: string
        description: Summary of detected drift.
      steps:
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: INFRA
          issuetype: Task
          summary: '[Drift] {{workspace_name}}: {{drift_summary}}'
          description: 'Terraform drift detected in workspace {{workspace_name}} ({{workspace_id}}).


            Drift: {{drift_summary}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: platform-engineering
          text: 'Drift detected in {{workspace_name}} | Jira: {{create-ticket.key}} | {{drift_summary}}'
      - name: trigger-plan
        type: call
        call: terraform-api.create-run
        with:
          workspace_id: '{{workspace_id}}'
  consumes:
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: terraform-api
    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-drift-detection-and-remediation.yml

When an employee is terminated, deactivates their Okta account, revokes all application assignments, and logs the action in ServiceNow.

naftiko: '0.5'
info:
  label: Okta Deactivation and Access Revocation
  description: When an employee is terminated, deactivates their Okta account, revokes all application assignments, and logs the action in ServiceNow.
  tags:
  - security
  - okta
  - servicenow
  - offboarding
capability:
  exposes:
  - type: mcp
    namespace: access-revocation
    port: 8080
    tools:
    - name: revoke-access
      description: Given an Okta user ID for a terminated employee, deactivate the account, remove app assignments, and create a ServiceNow audit record.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Okta user ID.
      - name: employee_name
        in: body
        type: string
        description: The employee's display name.
      steps:
      - name: deactivate-user
        type: call
        call: okta-api.deactivate-user
        with:
          user_id: '{{user_id}}'
      - name: revoke-apps
        type: call
        call: okta-api.clear-sessions
        with:
          user_id: '{{user_id}}'
      - name: log-audit
        type: call
        call: servicenow-api.create-record
        with:
          short_description: Access revoked for {{employee_name}}
          description: Okta account {{user_id}} deactivated and all sessions cleared for {{employee_name}}.
          category: access_management
  consumes:
  - type: http
    namespace: okta-api
    baseUri: https://salesforce.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: user-lifecycle
      path: /users/{{user_id}}/lifecycle/deactivate
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
    - name: user-sessions
      path: /users/{{user_id}}/sessions
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: clear-sessions
        method: DELETE
  - type: http
    namespace: servicenow-api
    baseUri: https://salesforce.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: audit-records
      path: /table/incident
      operations:
      - name: create-record
        method: POST
Open in Framework → View in Fleet → okta-deactivation-and-access-revocation.yml

When usage analytics in Snowflake indicate a customer is exceeding their current tier, creates an upsell opportunity in Salesforce and notifies the account owner via Slack.

naftiko: '0.5'
info:
  label: Salesforce Upsell Opportunity Generator
  description: When usage analytics in Snowflake indicate a customer is exceeding their current tier, creates an upsell opportunity in Salesforce and notifies the account owner via Slack.
  tags:
  - crm
  - salesforce
  - snowflake
  - slack
  - revenue-growth
capability:
  exposes:
  - type: mcp
    namespace: upsell-generator
    port: 8080
    tools:
    - name: generate-upsell
      description: Given an account ID with high usage, create an upsell opportunity and notify the account owner.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account ID.
      steps:
      - name: get-usage
        type: call
        call: snowflake-api.run-query
        with:
          account_id: '{{account_id}}'
      - name: get-account
        type: call
        call: sfdc-api.get-account
        with:
          account_id: '{{account_id}}'
      - name: create-opp
        type: call
        call: sfdc-api.create-opportunity
        with:
          Name: Upsell — {{get-account.Name}}
          AccountId: '{{account_id}}'
          StageName: Qualification
          Type: Existing Business
      - name: notify-owner
        type: call
        call: slack-api.post-message
        with:
          channel: account-growth
          text: 'Upsell opportunity created: {{get-account.Name}} | Usage: {{get-usage.data.usage_pct}}% of tier | Opp: {{create-opp.id}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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: sfdc-api
    baseUri: https://salesforce.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
    - name: opportunities
      path: /sobjects/Opportunity
      operations:
      - name: create-opportunity
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-upsell-opportunity-generator.yml

At the end of each quarter, aggregates opportunity data from Salesforce, generates a forecast summary in Snowflake, and posts the forecast to Slack.

naftiko: '0.5'
info:
  label: Salesforce Forecast Submission Automation
  description: At the end of each quarter, aggregates opportunity data from Salesforce, generates a forecast summary in Snowflake, and posts the forecast to Slack.
  tags:
  - crm
  - salesforce
  - snowflake
  - slack
  - sales-analytics
capability:
  exposes:
  - type: mcp
    namespace: forecast-automation
    port: 8080
    tools:
    - name: generate-forecast
      description: Given a fiscal quarter, aggregate opportunity data, generate a forecast summary, and post to Slack.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: The fiscal quarter (e.g., FY24Q4).
      steps:
      - name: get-forecast-data
        type: call
        call: snowflake-api.run-query
        with:
          fiscal_quarter: '{{fiscal_quarter}}'
      - name: update-forecast
        type: call
        call: sfdc-api.update-forecast
        with:
          quarter: '{{fiscal_quarter}}'
          commit: '{{get-forecast-data.data.commit}}'
      - name: post-forecast
        type: call
        call: slack-api.post-message
        with:
          channel: sales-leadership
          text: 'Forecast {{fiscal_quarter}} | Commit: ${{get-forecast-data.data.commit}} | Best Case: ${{get-forecast-data.data.best_case}} | Pipeline: ${{get-forecast-data.data.pipeline}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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: sfdc-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: forecasts
      path: /sobjects/ForecastingItem
      operations:
      - name: update-forecast
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-forecast-submission-automation.yml

Retrieves recent messages from a Slack channel for context gathering and incident timeline review.

naftiko: '0.5'
info:
  label: Slack Channel History Lookup
  description: Retrieves recent messages from a Slack channel for context gathering and incident timeline review.
  tags:
  - communications
  - slack
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: slack-history
    port: 8080
    tools:
    - name: get-channel-history
      description: Given a Slack channel ID, return the last 20 messages for context gathering. Use during incident response or decision review.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Slack channel ID.
      call: slack-api.get-history
      with:
        channel_id: '{{channel_id}}'
      outputParameters:
      - name: messages
        type: array
        mapping: $.messages
  consumes:
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: conversations
      path: /conversations.history?channel={{channel_id}}&limit=20
      inputParameters:
      - name: channel_id
        in: path
      operations:
      - name: get-history
        method: GET
Open in Framework → View in Fleet → slack-channel-history-lookup.yml

Queries Workday for employees with overdue compliance training, creates a Jira task for HR follow-up, and sends reminders via Slack.

naftiko: '0.5'
info:
  label: Workday Compliance Training Tracker
  description: Queries Workday for employees with overdue compliance training, creates a Jira task for HR follow-up, and sends reminders via Slack.
  tags:
  - hr
  - workday
  - jira
  - slack
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: compliance-training
    port: 8080
    tools:
    - name: track-overdue-training
      description: Find employees with overdue compliance training, create an HR task, and send reminders.
      inputParameters:
      - name: training_program
        in: body
        type: string
        description: The compliance training program name.
      steps:
      - name: get-overdue
        type: call
        call: workday-api.get-overdue-training
        with:
          program: '{{training_program}}'
      - name: create-task
        type: call
        call: jira-api.create-issue
        with:
          project: HR
          issuetype: Task
          summary: '[Compliance] {{training_program}} — {{get-overdue.count}} employees overdue'
      - name: send-reminder
        type: call
        call: slack-api.post-message
        with:
          channel: hr-compliance
          text: 'Compliance training overdue: {{training_program}} | Employees: {{get-overdue.count}} | Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd5-services1.myworkday.com/ccx/service/salesforce
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: training
      path: /Learning/v40.1/training_status
      operations:
      - name: get-overdue-training
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-compliance-training-tracker.yml

When Splunk detects a suspicious login pattern, creates a ServiceNow security incident, enriches with Okta user data, and pages the security team.

naftiko: '0.5'
info:
  label: Splunk SIEM Alert to Incident
  description: When Splunk detects a suspicious login pattern, creates a ServiceNow security incident, enriches with Okta user data, and pages the security team.
  tags:
  - security
  - splunk
  - servicenow
  - okta
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: siem-incident
    port: 8080
    tools:
    - name: handle-siem-alert
      description: Given a Splunk SIEM alert for suspicious activity, create a ServiceNow incident, enrich with Okta data, and page security.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: The Splunk alert ID.
      - name: user_email
        in: body
        type: string
        description: The affected user's email address.
      - name: alert_type
        in: body
        type: string
        description: Type of alert (e.g., impossible_travel, brute_force).
      steps:
      - name: get-alert
        type: call
        call: splunk-api.get-alert-results
        with:
          alert_id: '{{alert_id}}'
      - name: get-user-info
        type: call
        call: okta-api.get-user
        with:
          email: '{{user_email}}'
      - name: create-incident
        type: call
        call: servicenow-api.create-incident
        with:
          short_description: '[SIEM] {{alert_type}} for {{user_email}}'
          description: 'Splunk alert: {{alert_id}}

            User: {{user_email}} ({{get-user-info.profile.department}})

            Alert type: {{alert_type}}'
          category: security
          urgency: '1'
      - name: page-security
        type: call
        call: pagerduty-api.create-incident
        with:
          title: 'SIEM Alert: {{alert_type}} — {{user_email}}'
          service_id: $secrets.pagerduty_security_service_id
          urgency: high
  consumes:
  - type: http
    namespace: splunk-api
    baseUri: https://splunk.salesforce.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: alerts
      path: /search/jobs/{{alert_id}}/results
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert-results
        method: GET
  - type: http
    namespace: okta-api
    baseUri: https://salesforce.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: servicenow-api
    baseUri: https://salesforce.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-api
    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 → splunk-siem-alert-to-incident.yml

Scans GitHub repositories for open Dependabot security advisories and automatically creates Jira security tickets for critical and high severity findings.

naftiko: '0.5'
info:
  label: GitHub Security Advisory to Jira Ticket
  description: Scans GitHub repositories for open Dependabot security advisories and automatically creates Jira security tickets for critical and high severity findings.
  tags:
  - security
  - github
  - jira
  - devops
  - vulnerability-management
capability:
  exposes:
  - type: mcp
    namespace: security-advisories
    port: 8080
    tools:
    - name: triage-security-advisories
      description: Given a GitHub repository name, fetch open Dependabot advisories and create Jira security tickets for any critical or high severity findings.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository full name to scan for advisories (e.g., salesforce/apex-libs).
      - name: jira_project
        in: body
        type: string
        description: The Jira project key to file security tickets in.
      steps:
      - name: get-advisories
        type: call
        call: github-sec.list-dependabot-alerts
        with:
          repo: '{{repo}}'
      - name: create-ticket
        type: call
        call: jira-sec.create-issue
        with:
          project_key: '{{jira_project}}'
          issuetype: Security
          summary: 'Security advisory in {{repo}}: {{get-advisories.packageName}}'
          description: 'Severity: {{get-advisories.severity}}

            Advisory: {{get-advisories.advisoryUrl}}'
  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
      operations:
      - name: list-dependabot-alerts
        method: GET
  - type: http
    namespace: jira-sec
    baseUri: https://salesforce.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-security-advisory-to-jira-ticket.yml

Returns the status and row counts for a Snowflake data pipeline task execution.

naftiko: '0.5'
info:
  label: Snowflake Pipeline Execution Status
  description: Returns the status and row counts for a Snowflake data pipeline task execution.
  tags:
  - data-engineering
  - snowflake
  - pipelines
capability:
  exposes:
  - type: mcp
    namespace: pipeline-status
    port: 8080
    tools:
    - name: get-task-status
      description: Given a Snowflake task name, return the last execution status, rows processed, and completion time.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: The Snowflake task name.
      call: snowflake-tasks.get-task-history
      with:
        task_name: '{{task_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data[0].state
      - name: rows_processed
        type: number
        mapping: $.data[0].rows_produced
      - name: completed_at
        type: string
        mapping: $.data[0].completed_time
  consumes:
  - type: http
    namespace: snowflake-tasks
    baseUri: https://salesforce.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: statements
      path: /statements
      operations:
      - name: get-task-history
        method: POST
Open in Framework → View in Fleet → snowflake-pipeline-execution-status.yml

Enriches a Salesforce account with Snowflake usage analytics and ZoomInfo firmographic data to build a complete customer profile.

naftiko: '0.5'
info:
  label: Salesforce Customer 360 Enrichment
  description: Enriches a Salesforce account with Snowflake usage analytics and ZoomInfo firmographic data to build a complete customer profile.
  tags:
  - crm
  - salesforce
  - snowflake
  - zoominfo
  - customer-success
capability:
  exposes:
  - type: mcp
    namespace: customer-360
    port: 8080
    tools:
    - name: enrich-customer-360
      description: Given a Salesforce account ID, pull usage data from Snowflake, firmographics from ZoomInfo, and update the account profile.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account record ID.
      steps:
      - name: get-account
        type: call
        call: sfdc-api.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-usage
        type: call
        call: snowflake-api.run-query
        with:
          account_id: '{{account_id}}'
      - name: get-firmographics
        type: call
        call: zoominfo-api.search-company
        with:
          companyName: '{{get-account.Name}}'
      - name: update-account
        type: call
        call: sfdc-api.update-account
        with:
          account_id: '{{account_id}}'
          Usage_Score__c: '{{get-usage.data.usage_score}}'
          Industry: '{{get-firmographics.industry}}'
          NumberOfEmployees: '{{get-firmographics.employeeCount}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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
      - name: update-account
        method: PATCH
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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: zoominfo-api
    baseUri: https://api.zoominfo.com/search
    authentication:
      type: bearer
      token: $secrets.zoominfo_token
    resources:
    - name: companies
      path: /company
      operations:
      - name: search-company
        method: POST
Open in Framework → View in Fleet → salesforce-customer-360-enrichment.yml

Retrieves completed search job results from Splunk by job ID for log analysis and audit queries.

naftiko: '0.5'
info:
  label: Splunk Search Results Lookup
  description: Retrieves completed search job results from Splunk by job ID for log analysis and audit queries.
  tags:
  - security
  - splunk
  - log-analytics
capability:
  exposes:
  - type: mcp
    namespace: splunk-search
    port: 8080
    tools:
    - name: get-search-results
      description: Given a Splunk search job ID, return the results. Use for retrieving completed log analysis or audit query output.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: The Splunk search job ID.
      call: splunk-api.get-results
      with:
        job_id: '{{job_id}}'
      outputParameters:
      - name: results
        type: array
        mapping: $.results
  consumes:
  - type: http
    namespace: splunk-api
    baseUri: https://splunk.salesforce.com:8089/services
    authentication:
      type: bearer
      token: $secrets.splunk_token
    resources:
    - name: search-results
      path: /search/jobs/{{job_id}}/results
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: get-results
        method: GET
Open in Framework → View in Fleet → splunk-search-results-lookup.yml

Returns the current health status and error rate of a service from Datadog APM for quick operational checks.

naftiko: '0.5'
info:
  label: Datadog APM Service Status
  description: Returns the current health status and error rate of a service from Datadog APM for quick operational checks.
  tags:
  - observability
  - datadog
  - apm
capability:
  exposes:
  - type: mcp
    namespace: apm-status
    port: 8080
    tools:
    - name: get-service-status
      description: Given a Datadog service name, return its current health status, error rate, and latency from APM. Use for operational status checks.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: The Datadog APM service name.
      call: datadog-apm.get-service
      with:
        service_name: '{{service_name}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.data.attributes.status
      - name: error_rate
        type: number
        mapping: $.data.attributes.error_rate
      - name: avg_latency_ms
        type: number
        mapping: $.data.attributes.avg_latency
  consumes:
  - type: http
    namespace: datadog-apm
    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_dependencies/{{service_name}}
      inputParameters:
      - name: service_name
        in: path
      operations:
      - name: get-service
        method: GET
Open in Framework → View in Fleet → datadog-apm-service-status.yml

When a GitHub release is published for a Lightning Web Component, deploys to the Salesforce sandbox and notifies the dev team via Slack.

naftiko: '0.5'
info:
  label: Salesforce Lightning Component Deployment
  description: When a GitHub release is published for a Lightning Web Component, deploys to the Salesforce sandbox and notifies the dev team via Slack.
  tags:
  - devops
  - github
  - salesforce
  - salesforce-lightning
  - slack
capability:
  exposes:
  - type: mcp
    namespace: lwc-deploy
    port: 8080
    tools:
    - name: deploy-lwc
      description: Given a GitHub release tag for a Lightning Web Component, deploy to sandbox and notify the dev team.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      - name: release_tag
        in: body
        type: string
        description: The release tag to deploy.
      steps:
      - name: get-release
        type: call
        call: github-api.get-release
        with:
          repo: '{{repo}}'
          tag: '{{release_tag}}'
      - name: deploy-to-sandbox
        type: call
        call: sfdc-tooling.deploy-metadata
        with:
          source_url: '{{get-release.zipball_url}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: lwc-development
          text: 'LWC Deployed: {{repo}} {{release_tag}} to sandbox | Status: {{deploy-to-sandbox.status}} | Author: {{get-release.author.login}}'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: releases
      path: /repos/salesforce/{{repo}}/releases/tags/{{tag}}
      inputParameters:
      - name: repo
        in: path
      - name: tag
        in: path
      operations:
      - name: get-release
        method: GET
  - type: http
    namespace: sfdc-tooling
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0/tooling
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: deployments
      path: /sobjects/MetadataContainer
      operations:
      - name: deploy-metadata
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-lightning-component-deployment.yml

When a new event registration is received, creates a Salesforce campaign member, sends a confirmation via email, and posts registration stats to Slack.

naftiko: '0.5'
info:
  label: Salesforce Event Registration Processor
  description: When a new event registration is received, creates a Salesforce campaign member, sends a confirmation via email, and posts registration stats to Slack.
  tags:
  - crm
  - salesforce
  - slack
  - events
capability:
  exposes:
  - type: mcp
    namespace: event-registration
    port: 8080
    tools:
    - name: process-registration
      description: Given an event registration, create a campaign member in Salesforce and post stats to Slack.
      inputParameters:
      - name: contact_id
        in: body
        type: string
        description: The Salesforce contact ID.
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign ID for the event.
      steps:
      - name: get-contact
        type: call
        call: sfdc-api.get-contact
        with:
          contact_id: '{{contact_id}}'
      - name: add-member
        type: call
        call: sfdc-api.create-campaign-member
        with:
          CampaignId: '{{campaign_id}}'
          ContactId: '{{contact_id}}'
          Status: Registered
      - name: post-stats
        type: call
        call: slack-api.post-message
        with:
          channel: events-team
          text: 'New registration: {{get-contact.Name}} ({{get-contact.Account.Name}}) for campaign {{campaign_id}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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: campaign-members
      path: /sobjects/CampaignMember
      operations:
      - name: create-campaign-member
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-event-registration-processor.yml

Queries Salesforce CRM for account activity signals and updates each account's health score field based on recent case volume and opportunity pipeline.

naftiko: '0.5'
info:
  label: Salesforce Account Health Score Update
  description: Queries Salesforce CRM for account activity signals and updates each account's health score field based on recent case volume and opportunity pipeline.
  tags:
  - crm
  - salesforce
  - customer-success
  - account-management
capability:
  exposes:
  - type: mcp
    namespace: crm-health
    port: 8080
    tools:
    - name: update-account-health
      description: Given a Salesforce account ID, query recent case activity and open opportunities, compute a health score, and update the account record.
      inputParameters:
      - name: account_id
        in: body
        type: string
        description: The Salesforce account record ID to update.
      steps:
      - name: get-account
        type: call
        call: sfdc-health.get-account
        with:
          account_id: '{{account_id}}'
      - name: get-cases
        type: call
        call: sfdc-cases.list-cases
        with:
          account_id: '{{account_id}}'
      - name: update-health-score
        type: call
        call: sfdc-health.update-account
        with:
          account_id: '{{account_id}}'
          Health_Score__c: '{{get-cases.healthScore}}'
  consumes:
  - type: http
    namespace: sfdc-health
    baseUri: https://salesforce.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
      - name: update-account
        method: PATCH
  - type: http
    namespace: sfdc-cases
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case
      operations:
      - name: list-cases
        method: GET
Open in Framework → View in Fleet → salesforce-account-health-score-update.yml

Returns response rate, ROI, and member count for a Salesforce marketing campaign by campaign ID.

naftiko: '0.5'
info:
  label: Salesforce Campaign Performance Lookup
  description: Returns response rate, ROI, and member count for a Salesforce marketing campaign by campaign ID.
  tags:
  - crm
  - salesforce
  - marketing
capability:
  exposes:
  - type: mcp
    namespace: sfdc-campaigns
    port: 8080
    tools:
    - name: get-campaign-performance
      description: Given a Salesforce campaign ID, return its response rate, ROI, number of members, and status.
      inputParameters:
      - name: campaign_id
        in: body
        type: string
        description: The Salesforce campaign record ID.
      call: sfdc-campaign.get-campaign
      with:
        campaign_id: '{{campaign_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.Status
      - name: num_responses
        type: number
        mapping: $.NumberOfResponses
      - name: amount_won
        type: number
        mapping: $.AmountWonOpportunities
      - name: member_count
        type: number
        mapping: $.NumberOfContacts
  consumes:
  - type: http
    namespace: sfdc-campaign
    baseUri: https://salesforce.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
Open in Framework → View in Fleet → salesforce-campaign-performance-lookup.yml

Queries Jira for overdue tickets across all projects, generates a summary grouped by team, and posts to Slack leadership channel.

naftiko: '0.5'
info:
  label: Jira Overdue Tickets Digest
  description: Queries Jira for overdue tickets across all projects, generates a summary grouped by team, and posts to Slack leadership channel.
  tags:
  - devops
  - jira
  - slack
  - project-management
capability:
  exposes:
  - type: mcp
    namespace: overdue-digest
    port: 8080
    tools:
    - name: generate-overdue-digest
      description: Query Jira for overdue tickets, summarize by team, and post to Slack.
      inputParameters:
      - name: days_overdue
        in: body
        type: number
        description: Minimum days overdue to include.
      steps:
      - name: query-overdue
        type: call
        call: jira-api.search-issues
        with:
          jql: duedate < now() AND status != Done
      - name: post-digest
        type: call
        call: slack-api.post-message
        with:
          channel: engineering-leadership
          text: 'Overdue Tickets Digest: {{query-overdue.total}} tickets overdue by {{days_overdue}}+ days.'
  consumes:
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.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
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-overdue-tickets-digest.yml

When a Workday role change is detected, updates the employee's Okta groups to match the new role and notifies their manager via Slack.

naftiko: '0.5'
info:
  label: Workday Promotion to Okta Group Update
  description: When a Workday role change is detected, updates the employee's Okta groups to match the new role and notifies their manager via Slack.
  tags:
  - hr
  - workday
  - okta
  - slack
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: role-sync
    port: 8080
    tools:
    - name: sync-role-change
      description: Given a Workday employee ID with a new role, update their Okta group memberships and notify the manager.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: new_role
        in: body
        type: string
        description: The new role title.
      steps:
      - name: get-employee
        type: call
        call: workday-api.get-worker
        with:
          employee_id: '{{employee_id}}'
      - name: update-okta-groups
        type: call
        call: okta-api.update-groups
        with:
          user_email: '{{get-employee.email}}'
          groups: '{{new_role}}'
      - name: notify-manager
        type: call
        call: slack-api.post-message
        with:
          channel: '{{get-employee.manager.slackId}}'
          text: 'Role change processed: {{get-employee.name}} promoted to {{new_role}}. Okta groups updated.'
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd5-services1.myworkday.com/ccx/service/salesforce
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: workers
      path: /Human_Resources/v40.1/workers/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-api
    baseUri: https://salesforce.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: group-memberships
      path: /users/{{user_email}}/groups
      inputParameters:
      - name: user_email
        in: path
      operations:
      - name: update-groups
        method: PUT
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-promotion-to-okta-group-update.yml

When a Datadog critical monitor fires, automatically opens a Jira P1 incident and notifies the on-call channel in Slack with monitor details.

naftiko: '0.5'
info:
  label: Datadog Monitor Alert to Jira Incident
  description: When a Datadog critical monitor fires, automatically opens a Jira P1 incident and notifies the on-call channel in Slack with monitor details.
  tags:
  - observability
  - datadog
  - jira
  - slack
  - incident-response
  - itsm
capability:
  exposes:
  - type: mcp
    namespace: itsm-alerting
    port: 8080
    tools:
    - name: handle-monitor-alert
      description: Given a Datadog monitor ID and alert context, create a Jira P1 incident and page the on-call Slack channel. Use when critical infrastructure monitors fire.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: The Datadog monitor ID that fired.
      - name: monitor_name
        in: body
        type: string
        description: The human-readable name of the Datadog monitor.
      - name: alert_body
        in: body
        type: string
        description: The full alert message from Datadog.
      steps:
      - name: create-incident
        type: call
        call: jira-alert.create-issue
        with:
          project_key: OPS
          issuetype: Incident
          summary: 'P1: Datadog Alert — {{monitor_name}}'
          description: 'Monitor ID: {{monitor_id}}

            {{alert_body}}'
          priority: Highest
      - name: page-oncall
        type: call
        call: slack-alert.post-message
        with:
          channel: incidents
          text: 'P1 Incident: {{monitor_name}} | Jira: {{create-incident.key}} | Monitor: {{monitor_id}}'
  consumes:
  - type: http
    namespace: jira-alert
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-alert
    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 → datadog-monitor-alert-to-jira-incident.yml

Returns the last refresh time, status, and owner of a Tableau dashboard by workbook name.

naftiko: '0.5'
info:
  label: Tableau Dashboard Status Check
  description: Returns the last refresh time, status, and owner of a Tableau dashboard by workbook name.
  tags:
  - analytics
  - tableau
  - dashboards
capability:
  exposes:
  - type: mcp
    namespace: tableau-status
    port: 8080
    tools:
    - name: get-dashboard-status
      description: Given a Tableau workbook name, return its last refresh time, status, and owner. Use for dashboard health checks.
      inputParameters:
      - name: workbook_name
        in: body
        type: string
        description: The Tableau workbook name.
      call: tableau-api.get-workbook
      with:
        workbook_name: '{{workbook_name}}'
      outputParameters:
      - name: last_refresh
        type: string
        mapping: $.workbook.updatedAt
      - name: status
        type: string
        mapping: $.workbook.status
      - name: owner
        type: string
        mapping: $.workbook.owner.name
  consumes:
  - type: http
    namespace: tableau-api
    baseUri: https://tableau.salesforce.com/api/3.19
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: workbooks
      path: /sites/default/workbooks?filter=name:eq:{{workbook_name}}
      inputParameters:
      - name: workbook_name
        in: path
      operations:
      - name: get-workbook
        method: GET
Open in Framework → View in Fleet → tableau-dashboard-status-check.yml

When a Datadog monitor triggers a critical alert, pages the on-call engineer via PagerDuty and creates a Slack incident channel.

naftiko: '0.5'
info:
  label: Datadog Alert to PagerDuty Escalation
  description: When a Datadog monitor triggers a critical alert, pages the on-call engineer via PagerDuty and creates a Slack incident channel.
  tags:
  - observability
  - datadog
  - pagerduty
  - slack
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: alert-escalation
    port: 8080
    tools:
    - name: escalate-alert
      description: Given a Datadog monitor alert, page the on-call engineer via PagerDuty and create a Slack incident channel.
      inputParameters:
      - name: monitor_name
        in: body
        type: string
        description: The Datadog monitor name.
      - name: monitor_url
        in: body
        type: string
        description: URL to the Datadog monitor.
      - name: severity
        in: body
        type: string
        description: 'Alert severity: critical, error, or warning.'
      steps:
      - name: page-oncall
        type: call
        call: pagerduty-api.create-incident
        with:
          title: '[{{severity}}] {{monitor_name}}'
          service_id: $secrets.pagerduty_platform_service_id
          urgency: high
      - name: create-incident-channel
        type: call
        call: slack-api.create-channel
        with:
          name: inc-{{monitor_name}}
      - name: post-context
        type: call
        call: slack-api.post-message
        with:
          channel: '{{create-incident-channel.channel.id}}'
          text: 'Incident: {{monitor_name}} | Severity: {{severity}} | Monitor: {{monitor_url}} | PagerDuty: {{page-oncall.incident_url}}'
  consumes:
  - type: http
    namespace: pagerduty-api
    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
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: channels
      path: /conversations.create
      operations:
      - name: create-channel
        method: POST
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → datadog-alert-to-pagerduty-escalation.yml

Triggers a Salesforce Analytics (Einstein) dataset refresh and notifies the sales operations team in Slack when the dashboard is ready.

naftiko: '0.5'
info:
  label: Salesforce Einstein Analytics Dashboard Refresh
  description: Triggers a Salesforce Analytics (Einstein) dataset refresh and notifies the sales operations team in Slack when the dashboard is ready.
  tags:
  - analytics
  - salesforce
  - slack
  - reporting
  - sales-ops
capability:
  exposes:
  - type: mcp
    namespace: analytics-reporting
    port: 8080
    tools:
    - name: refresh-analytics-dataset
      description: Trigger a Salesforce Analytics dataset refresh by dataset ID and notify the sales ops Slack channel when complete.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Salesforce Analytics dataset API name or ID to refresh.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel to notify on completion.
      steps:
      - name: trigger-refresh
        type: call
        call: sfdc-analytics.refresh-dataset
        with:
          dataset_id: '{{dataset_id}}'
      - name: notify-sales-ops
        type: call
        call: slack-analytics.post-message
        with:
          channel: '{{slack_channel}}'
          text: Salesforce Analytics dataset {{dataset_id}} refresh has been triggered. Check back shortly for updated data.
  consumes:
  - type: http
    namespace: sfdc-analytics
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: dataset-jobs
      path: /wave/dataflowjobs
      operations:
      - name: refresh-dataset
        method: POST
  - type: http
    namespace: slack-analytics
    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 → salesforce-einstein-analytics-dashboard-refresh.yml

When a Salesforce Service Cloud case is open beyond SLA, escalates it to a senior agent, updates priority to Critical, and notifies the support lead in Slack.

naftiko: '0.5'
info:
  label: Salesforce Service Case Escalation
  description: When a Salesforce Service Cloud case is open beyond SLA, escalates it to a senior agent, updates priority to Critical, and notifies the support lead in Slack.
  tags:
  - crm
  - customer-support
  - salesforce
  - slack
  - sla
  - escalation
capability:
  exposes:
  - type: mcp
    namespace: crm-support
    port: 8080
    tools:
    - name: escalate-overdue-case
      description: Given a Salesforce case ID and escalation owner email, update the case priority to Critical, reassign it, and alert the support lead in Slack.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case record ID to escalate.
      - name: escalation_owner
        in: body
        type: string
        description: The Salesforce user ID of the escalation owner.
      steps:
      - name: get-case
        type: call
        call: sfdc-case.get-case
        with:
          case_id: '{{case_id}}'
      - name: update-case
        type: call
        call: sfdc-case.update-case
        with:
          case_id: '{{case_id}}'
          Priority: Critical
          OwnerId: '{{escalation_owner}}'
      - name: notify-lead
        type: call
        call: slack-support.post-message
        with:
          channel: support-escalations
          text: 'Case {{case_id}} escalated to Critical: {{get-case.Subject}} | Customer: {{get-case.AccountName}} | New owner: {{escalation_owner}}'
  consumes:
  - type: http
    namespace: sfdc-case
    baseUri: https://salesforce.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
      - name: update-case
        method: PATCH
  - type: http
    namespace: slack-support
    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 → salesforce-service-case-escalation.yml

Retrieves approved job requisition details from Workday and publishes the job to LinkedIn, enabling faster external candidate sourcing.

naftiko: '0.5'
info:
  label: LinkedIn Job Posting Publication
  description: Retrieves approved job requisition details from Workday and publishes the job to LinkedIn, enabling faster external candidate sourcing.
  tags:
  - hr
  - recruiting
  - linkedin
  - workday
  - talent-acquisition
capability:
  exposes:
  - type: mcp
    namespace: hr-recruiting
    port: 8080
    tools:
    - name: publish-job-to-linkedin
      description: Given a Workday job requisition ID, fetch its details and publish a formatted job posting to Salesforce's LinkedIn company page.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID to publish.
      - name: linkedin_company_id
        in: body
        type: string
        description: The LinkedIn company page ID for Salesforce.
      steps:
      - name: get-requisition
        type: call
        call: workday-jobs.get-job-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: post-job
        type: call
        call: linkedin-jobs.create-job-posting
        with:
          companyId: '{{linkedin_company_id}}'
          title: '{{get-requisition.jobTitle}}'
          description: '{{get-requisition.jobDescription}}'
          location: '{{get-requisition.location}}'
  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: /salesforce/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: /jobPostings
      operations:
      - name: create-job-posting
        method: POST
Open in Framework → View in Fleet → linkedin-job-posting-publication.yml

When a GitHub Actions workflow completes, logs the deployment in ServiceNow CMDB, updates the Jira release ticket, and posts status to Slack.

naftiko: '0.5'
info:
  label: GitHub CI/CD Deployment Tracker
  description: When a GitHub Actions workflow completes, logs the deployment in ServiceNow CMDB, updates the Jira release ticket, and posts status to Slack.
  tags:
  - devops
  - github
  - servicenow
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: deployment-tracker
    port: 8080
    tools:
    - name: track-deployment
      description: Given a completed GitHub Actions run, log in ServiceNow CMDB, update Jira release, and notify Slack.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      - name: run_id
        in: body
        type: string
        description: The GitHub Actions workflow run ID.
      - name: release_ticket
        in: body
        type: string
        description: The Jira release ticket key.
      steps:
      - name: get-run
        type: call
        call: github-api.get-workflow-run
        with:
          repo: '{{repo}}'
          run_id: '{{run_id}}'
      - name: log-to-cmdb
        type: call
        call: servicenow-api.create-deployment
        with:
          application: '{{repo}}'
          version: '{{get-run.head_sha}}'
          environment: production
          status: '{{get-run.conclusion}}'
      - name: update-jira
        type: call
        call: jira-api.transition-issue
        with:
          issue_key: '{{release_ticket}}'
          transition_id: '41'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: deployments
          text: 'Deployment: {{repo}} | SHA: {{get-run.head_sha}} | Status: {{get-run.conclusion}} | Release: {{release_ticket}}'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/salesforce/{{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: servicenow-api
    baseUri: https://salesforce.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: deployments
      path: /table/change_request
      operations:
      - name: create-deployment
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: transitions
      path: /issue/{{issue_key}}/transitions
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: transition-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-ci-cd-deployment-tracker.yml

Assigns a new Okta user to the appropriate application groups based on their Workday department and role, ensuring correct SSO access from day one.

naftiko: '0.5'
info:
  label: Okta User Group Provisioning
  description: Assigns a new Okta user to the appropriate application groups based on their Workday department and role, ensuring correct SSO access from day one.
  tags:
  - identity
  - okta
  - workday
  - access-management
  - hr
capability:
  exposes:
  - type: mcp
    namespace: identity-provisioning
    port: 8080
    tools:
    - name: assign-okta-groups
      description: Given a Workday employee ID and their department, assign the Okta user to the appropriate application access groups based on role profile.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday worker ID for the employee.
      - name: department
        in: body
        type: string
        description: The employee's department name used to determine group assignments.
      steps:
      - name: get-employee
        type: call
        call: workday-grp.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: add-to-group
        type: call
        call: okta-grp.add-user-to-group
        with:
          userId: '{{get-employee.oktaId}}'
          groupId: '{{get-employee.defaultGroupId}}'
  consumes:
  - type: http
    namespace: workday-grp
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /salesforce/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta-grp
    baseUri: https://salesforce.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
Open in Framework → View in Fleet → okta-user-group-provisioning.yml

When a Snowflake data quality check fails, creates a Jira ticket for the data engineering team and posts alert details to Slack.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Alert Handler
  description: When a Snowflake data quality check fails, creates a Jira ticket for the data engineering team and posts alert details to Slack.
  tags:
  - data-engineering
  - snowflake
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: dq-alert
    port: 8080
    tools:
    - name: handle-dq-failure
      description: Given a failed Snowflake data quality check, create a Jira ticket and alert the data engineering team via Slack.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: The Snowflake table that failed the quality check.
      - name: check_name
        in: body
        type: string
        description: Name of the data quality check.
      - name: failure_details
        in: body
        type: string
        description: Details about the failure.
      steps:
      - name: create-ticket
        type: call
        call: jira-api.create-issue
        with:
          project: DATA
          issuetype: Bug
          summary: '[DQ Failure] {{check_name}} on {{table_name}}'
          description: 'Data quality check failed.

            Table: {{table_name}}

            Check: {{check_name}}

            Details: {{failure_details}}'
      - name: alert-team
        type: call
        call: slack-api.post-message
        with:
          channel: data-engineering
          text: 'DQ Alert: {{check_name}} failed on {{table_name}} | Jira: {{create-ticket.key}} | {{failure_details}}'
  consumes:
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-alert-handler.yml

When a Salesforce case approaches SLA breach, escalates to the support manager, creates a PagerDuty incident, and posts an alert to Slack.

naftiko: '0.5'
info:
  label: Salesforce SLA Breach Escalation
  description: When a Salesforce case approaches SLA breach, escalates to the support manager, creates a PagerDuty incident, and posts an alert to Slack.
  tags:
  - crm
  - salesforce
  - pagerduty
  - slack
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: sla-escalation
    port: 8080
    tools:
    - name: escalate-sla-breach
      description: Given a Salesforce case approaching SLA breach, escalate via PagerDuty and notify the support team.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case record ID.
      - name: minutes_remaining
        in: body
        type: number
        description: Minutes remaining until SLA breach.
      steps:
      - name: get-case
        type: call
        call: sfdc-api.get-case
        with:
          case_id: '{{case_id}}'
      - name: page-manager
        type: call
        call: pagerduty-api.create-incident
        with:
          title: 'SLA Breach Imminent: Case {{case_id}} — {{minutes_remaining}} min remaining'
          service_id: $secrets.pagerduty_support_service_id
          urgency: high
      - name: escalate-case
        type: call
        call: sfdc-api.update-case
        with:
          case_id: '{{case_id}}'
          Priority: Critical
          Escalated: 'true'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: support-escalations
          text: 'SLA Breach Alert: Case {{case_id}} | Account: {{get-case.Account.Name}} | {{minutes_remaining}} min remaining | PD: {{page-manager.incident_url}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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
      - name: update-case
        method: PATCH
  - type: http
    namespace: pagerduty-api
    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
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-sla-breach-escalation.yml

When a new inbound lead is created, determines the next available rep using round-robin logic, assigns the lead, and notifies the rep via Slack.

naftiko: '0.5'
info:
  label: Salesforce Lead Routing Round Robin
  description: When a new inbound lead is created, determines the next available rep using round-robin logic, assigns the lead, and notifies the rep via Slack.
  tags:
  - crm
  - salesforce
  - slack
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: lead-routing
    port: 8080
    tools:
    - name: route-lead
      description: Given a new Salesforce lead ID, determine the next rep via round-robin, assign the lead, and notify the rep.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID.
      - name: territory
        in: body
        type: string
        description: The territory for routing.
      steps:
      - name: get-lead
        type: call
        call: sfdc-api.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: get-next-rep
        type: call
        call: snowflake-api.run-query
        with:
          territory: '{{territory}}'
      - name: assign-lead
        type: call
        call: sfdc-api.update-lead
        with:
          lead_id: '{{lead_id}}'
          OwnerId: '{{get-next-rep.data.rep_id}}'
      - name: notify-rep
        type: call
        call: slack-api.post-message
        with:
          channel: '{{get-next-rep.data.rep_slack_channel}}'
          text: 'New lead assigned: {{get-lead.Name}} at {{get-lead.Company}} | Source: {{get-lead.LeadSource}} | Territory: {{territory}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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: update-lead
        method: PATCH
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-lead-routing-round-robin.yml

When a user requests an MFA reset, verifies identity via Workday, resets MFA factors in Okta, sends confirmation via Slack, and logs in ServiceNow.

naftiko: '0.5'
info:
  label: Okta MFA Reset Workflow
  description: When a user requests an MFA reset, verifies identity via Workday, resets MFA factors in Okta, sends confirmation via Slack, and logs in ServiceNow.
  tags:
  - security
  - okta
  - workday
  - slack
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: mfa-reset
    port: 8080
    tools:
    - name: reset-mfa
      description: Given a user email requesting MFA reset, verify identity, reset factors, confirm via Slack, and log in ServiceNow.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The user's email address.
      - name: ticket_number
        in: body
        type: string
        description: The support ticket number.
      steps:
      - name: verify-identity
        type: call
        call: workday-api.get-worker-by-email
        with:
          email: '{{user_email}}'
      - name: reset-factors
        type: call
        call: okta-api.reset-factors
        with:
          email: '{{user_email}}'
      - name: confirm-user
        type: call
        call: slack-api.post-message
        with:
          channel: it-helpdesk
          text: 'MFA reset completed for {{user_email}} ({{verify-identity.name}}) | Ticket: {{ticket_number}}'
      - name: log-event
        type: call
        call: servicenow-api.update-ticket
        with:
          ticket_number: '{{ticket_number}}'
          work_notes: MFA factors reset for {{user_email}}. Identity verified via Workday.
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd5-services1.myworkday.com/ccx/service/salesforce
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: workers
      path: /Human_Resources/v40.1/workers?email={{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-worker-by-email
        method: GET
  - type: http
    namespace: okta-api
    baseUri: https://salesforce.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: factors
      path: /users/{{email}}/lifecycle/reset_factors
      inputParameters:
      - name: email
        in: path
      operations:
      - name: reset-factors
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: servicenow-api
    baseUri: https://salesforce.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: tickets
      path: /table/incident?sysparm_query=number={{ticket_number}}
      inputParameters:
      - name: ticket_number
        in: path
      operations:
      - name: update-ticket
        method: PATCH
Open in Framework → View in Fleet → okta-mfa-reset-workflow.yml

When a high-priority case is created in Service Cloud, assigns it to the best available agent using Einstein and notifies the support lead in Slack.

naftiko: '0.5'
info:
  label: Salesforce Service Cloud Case Routing
  description: When a high-priority case is created in Service Cloud, assigns it to the best available agent using Einstein and notifies the support lead in Slack.
  tags:
  - crm
  - salesforce
  - salesforce-service-cloud
  - slack
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: case-routing
    port: 8080
    tools:
    - name: route-high-priority-case
      description: Given a new high-priority Service Cloud case, use Einstein for agent matching, assign the case, and notify the support lead.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case record ID.
      steps:
      - name: get-case
        type: call
        call: sfdc-service.get-case
        with:
          case_id: '{{case_id}}'
      - name: get-best-agent
        type: call
        call: einstein-api.get-recommendation
        with:
          case_id: '{{case_id}}'
          skill_required: '{{get-case.Type}}'
      - name: assign-case
        type: call
        call: sfdc-service.update-case
        with:
          case_id: '{{case_id}}'
          OwnerId: '{{get-best-agent.agentId}}'
      - name: notify-lead
        type: call
        call: slack-api.post-message
        with:
          channel: support-leads
          text: 'P1 Case routed: {{case_id}} | Subject: {{get-case.Subject}} | Account: {{get-case.Account.Name}} | Assigned to: {{get-best-agent.agentName}}'
  consumes:
  - type: http
    namespace: sfdc-service
    baseUri: https://salesforce.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
      - name: update-case
        method: PATCH
  - type: http
    namespace: einstein-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0/smartdatadiscovery
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: recommendations
      path: /predict
      operations:
      - name: get-recommendation
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-service-cloud-case-routing.yml

When a Salesforce lead scores above threshold, enriches with ZoomInfo data, qualifies as MQL, assigns to sales rep, and notifies via Slack.

naftiko: '0.5'
info:
  label: Salesforce Lead to MQL Qualification
  description: When a Salesforce lead scores above threshold, enriches with ZoomInfo data, qualifies as MQL, assigns to sales rep, and notifies via Slack.
  tags:
  - crm
  - salesforce
  - zoominfo
  - slack
  - lead-management
capability:
  exposes:
  - type: mcp
    namespace: lead-qualification
    port: 8080
    tools:
    - name: qualify-lead
      description: Given a Salesforce lead ID with a score above threshold, enrich with ZoomInfo, mark as MQL, assign to a rep, and notify via Slack.
      inputParameters:
      - name: lead_id
        in: body
        type: string
        description: The Salesforce lead record ID.
      - name: lead_score
        in: body
        type: number
        description: The current lead score.
      steps:
      - name: get-lead
        type: call
        call: sfdc-lead.get-lead
        with:
          lead_id: '{{lead_id}}'
      - name: enrich
        type: call
        call: zoominfo-api.search-company
        with:
          companyName: '{{get-lead.Company}}'
      - name: update-lead-mql
        type: call
        call: sfdc-lead.update-lead
        with:
          lead_id: '{{lead_id}}'
          Status: MQL
          Industry: '{{enrich.industry}}'
          NumberOfEmployees: '{{enrich.employeeCount}}'
      - name: notify-rep
        type: call
        call: slack-api.post-message
        with:
          channel: sales-leads
          text: 'New MQL: {{get-lead.Name}} at {{get-lead.Company}} | Score: {{lead_score}} | Employees: {{enrich.employeeCount}} | Industry: {{enrich.industry}}'
  consumes:
  - type: http
    namespace: sfdc-lead
    baseUri: https://salesforce.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: update-lead
        method: PATCH
  - type: http
    namespace: zoominfo-api
    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: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-lead-to-mql-qualification.yml

Returns request count, average response time, and error rate for a MuleSoft managed API.

naftiko: '0.5'
info:
  label: MuleSoft API Analytics Lookup
  description: Returns request count, average response time, and error rate for a MuleSoft managed API.
  tags:
  - integration
  - mulesoft
  - api-management
capability:
  exposes:
  - type: mcp
    namespace: mulesoft-analytics
    port: 8080
    tools:
    - name: get-api-metrics
      description: Given a MuleSoft API ID, return its request count, average response time, and error rate for the last 24 hours.
      inputParameters:
      - name: api_id
        in: body
        type: string
        description: The MuleSoft Anypoint API instance ID.
      call: mulesoft-api.get-analytics
      with:
        api_id: '{{api_id}}'
      outputParameters:
      - name: request_count
        type: number
        mapping: $.data.requestCount
      - name: avg_response_time_ms
        type: number
        mapping: $.data.avgResponseTime
      - name: error_rate
        type: number
        mapping: $.data.errorRate
  consumes:
  - type: http
    namespace: mulesoft-api
    baseUri: https://anypoint.mulesoft.com/analytics/1.0
    authentication:
      type: bearer
      token: $secrets.mulesoft_token
    resources:
    - name: api-analytics
      path: /{{api_id}}/events?duration=24h
      inputParameters:
      - name: api_id
        in: path
      operations:
      - name: get-analytics
        method: GET
Open in Framework → View in Fleet → mulesoft-api-analytics-lookup.yml

Syncs campaign engagement data from Salesforce Marketing Cloud to Salesforce CRM, updates campaign member statuses, and posts a performance summary to Slack.

naftiko: '0.5'
info:
  label: Salesforce Marketing Cloud Campaign Sync
  description: Syncs campaign engagement data from Salesforce Marketing Cloud to Salesforce CRM, updates campaign member statuses, and posts a performance summary to Slack.
  tags:
  - crm
  - salesforce
  - salesforce-marketing-cloud
  - slack
  - marketing
capability:
  exposes:
  - type: mcp
    namespace: campaign-sync
    port: 8080
    tools:
    - name: sync-campaign-engagement
      description: Given a Marketing Cloud campaign ID, sync engagement data to Salesforce CRM and post performance to Slack.
      inputParameters:
      - name: mc_campaign_id
        in: body
        type: string
        description: The Marketing Cloud campaign ID.
      - name: sfdc_campaign_id
        in: body
        type: string
        description: The Salesforce CRM campaign ID.
      steps:
      - name: get-mc-metrics
        type: call
        call: mc-api.get-campaign-metrics
        with:
          campaign_id: '{{mc_campaign_id}}'
      - name: update-sfdc-campaign
        type: call
        call: sfdc-api.update-campaign
        with:
          campaign_id: '{{sfdc_campaign_id}}'
          NumberSent: '{{get-mc-metrics.sentCount}}'
          NumberOfResponses: '{{get-mc-metrics.clickCount}}'
      - name: post-summary
        type: call
        call: slack-api.post-message
        with:
          channel: marketing-ops
          text: 'Campaign sync complete | Sent: {{get-mc-metrics.sentCount}} | Opens: {{get-mc-metrics.openCount}} | Clicks: {{get-mc-metrics.clickCount}}'
  consumes:
  - type: http
    namespace: mc-api
    baseUri: https://mcapi.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.marketing_cloud_token
    resources:
    - name: campaigns
      path: /campaigns/{{campaign_id}}/metrics
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: get-campaign-metrics
        method: GET
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.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-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-marketing-cloud-campaign-sync.yml

When a Salesforce support case is escalated as a product bug, creates a Jira bug ticket, links it back to the case, and notifies the engineering team via Slack.

naftiko: '0.5'
info:
  label: Salesforce Case to Jira Bug
  description: When a Salesforce support case is escalated as a product bug, creates a Jira bug ticket, links it back to the case, and notifies the engineering team via Slack.
  tags:
  - crm
  - salesforce
  - jira
  - slack
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: case-to-bug
    port: 8080
    tools:
    - name: escalate-case-to-bug
      description: Given a Salesforce case ID marked as a product bug, create a Jira bug, link it to the case, and notify engineering.
      inputParameters:
      - name: case_id
        in: body
        type: string
        description: The Salesforce case record ID.
      steps:
      - name: get-case
        type: call
        call: sfdc-case.get-case
        with:
          case_id: '{{case_id}}'
      - name: create-jira-bug
        type: call
        call: jira-api.create-issue
        with:
          project: PLATFORM
          issuetype: Bug
          summary: '[Customer Bug] {{get-case.Subject}}'
          description: 'Salesforce Case: {{case_id}}

            Account: {{get-case.Account.Name}}

            Priority: {{get-case.Priority}}


            {{get-case.Description}}'
      - name: update-case
        type: call
        call: sfdc-case.update-case
        with:
          case_id: '{{case_id}}'
          Jira_Bug__c: '{{create-jira-bug.key}}'
      - name: notify-eng
        type: call
        call: slack-api.post-message
        with:
          channel: engineering-bugs
          text: 'New customer bug: {{create-jira-bug.key}} | Case: {{case_id}} | Account: {{get-case.Account.Name}} | Priority: {{get-case.Priority}}'
  consumes:
  - type: http
    namespace: sfdc-case
    baseUri: https://salesforce.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
      - name: update-case
        method: PATCH
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-case-to-jira-bug.yml

Generates a quarterly pipeline summary from Snowflake analytics, formats it as a report, and posts to the Slack sales-leadership channel.

naftiko: '0.5'
info:
  label: Salesforce Quarterly Pipeline Digest
  description: Generates a quarterly pipeline summary from Snowflake analytics, formats it as a report, and posts to the Slack sales-leadership channel.
  tags:
  - crm
  - salesforce
  - snowflake
  - slack
  - sales-analytics
capability:
  exposes:
  - type: mcp
    namespace: pipeline-digest
    port: 8080
    tools:
    - name: generate-pipeline-digest
      description: Given a fiscal quarter, query Snowflake for pipeline metrics and post a formatted summary to the Slack sales-leadership channel.
      inputParameters:
      - name: fiscal_quarter
        in: body
        type: string
        description: Fiscal quarter (e.g., FY24Q3).
      steps:
      - name: query-pipeline
        type: call
        call: snowflake-pipeline.run-query
        with:
          fiscal_quarter: '{{fiscal_quarter}}'
      - name: post-digest
        type: call
        call: slack-api.post-message
        with:
          channel: sales-leadership
          text: 'Pipeline Digest {{fiscal_quarter}} | Total: ${{query-pipeline.data.total_pipeline}} | New: ${{query-pipeline.data.new_pipeline}} | Weighted: ${{query-pipeline.data.weighted_pipeline}} | Win Rate: {{query-pipeline.data.win_rate}}%'
  consumes:
  - type: http
    namespace: snowflake-pipeline
    baseUri: https://salesforce.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: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-quarterly-pipeline-digest.yml

Identifies stale branches in a GitHub repository older than 90 days, creates a Jira cleanup task, and notifies owners via Slack.

naftiko: '0.5'
info:
  label: GitHub Stale Branch Cleanup Notification
  description: Identifies stale branches in a GitHub repository older than 90 days, creates a Jira cleanup task, and notifies owners via Slack.
  tags:
  - devops
  - github
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: branch-cleanup
    port: 8080
    tools:
    - name: notify-stale-branches
      description: Given a GitHub repository, identify stale branches, create a cleanup task, and notify branch owners.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      steps:
      - name: list-branches
        type: call
        call: github-api.list-branches
        with:
          repo: '{{repo}}'
      - name: create-task
        type: call
        call: jira-api.create-issue
        with:
          project: DEVOPS
          issuetype: Task
          summary: '[Cleanup] Stale branches in {{repo}}'
          description: Repository {{repo}} has stale branches older than 90 days requiring cleanup.
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: engineering
          text: 'Stale branch cleanup needed: {{repo}} | Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: github-api
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: branches
      path: /repos/salesforce/{{repo}}/branches?per_page=100
      inputParameters:
      - name: repo
        in: path
      operations:
      - name: list-branches
        method: GET
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-stale-branch-cleanup-notification.yml

When a new job requisition is approved in Workday, publishes it to LinkedIn Jobs, creates a Jira recruiting task, and notifies the recruiter via Slack.

naftiko: '0.5'
info:
  label: LinkedIn Job Posting to Workday Sync
  description: When a new job requisition is approved in Workday, publishes it to LinkedIn Jobs, creates a Jira recruiting task, and notifies the recruiter via Slack.
  tags:
  - hr
  - linkedin
  - workday
  - jira
  - slack
  - recruiting
capability:
  exposes:
  - type: mcp
    namespace: job-publishing
    port: 8080
    tools:
    - name: publish-job-posting
      description: Given an approved Workday requisition, publish to LinkedIn Jobs, create a Jira task, and notify the recruiter.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      steps:
      - name: get-req
        type: call
        call: workday-api.get-requisition
        with:
          requisition_id: '{{requisition_id}}'
      - name: post-to-linkedin
        type: call
        call: linkedin-api.create-job-posting
        with:
          title: '{{get-req.title}}'
          description: '{{get-req.description}}'
          location: '{{get-req.location}}'
      - name: create-task
        type: call
        call: jira-api.create-issue
        with:
          project: RECRUIT
          issuetype: Task
          summary: '[Hiring] {{get-req.title}} — {{get-req.location}}'
      - name: notify-recruiter
        type: call
        call: slack-api.post-message
        with:
          channel: talent-acquisition
          text: 'Job posted: {{get-req.title}} in {{get-req.location}} | LinkedIn: {{post-to-linkedin.url}} | Jira: {{create-task.key}}'
  consumes:
  - type: http
    namespace: workday-api
    baseUri: https://wd5-services1.myworkday.com/ccx/service/salesforce
    authentication:
      type: basic
      username: $secrets.workday_user
      password: $secrets.workday_password
    resources:
    - name: requisitions
      path: /Recruiting/v40.1/requisitions/{{requisition_id}}
      inputParameters:
      - name: requisition_id
        in: path
      operations:
      - name: get-requisition
        method: GET
  - type: http
    namespace: linkedin-api
    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: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → linkedin-job-posting-to-workday-sync.yml

When a Terraform Cloud run enters pending-approval state, fetches the plan summary and posts it to the platform engineering Slack channel for review.

naftiko: '0.5'
info:
  label: Terraform Cloud Plan Review and Notification
  description: When a Terraform Cloud run enters pending-approval state, fetches the plan summary and posts it to the platform engineering Slack channel for review.
  tags:
  - cloud
  - infrastructure
  - terraform
  - slack
  - approval
  - devops
capability:
  exposes:
  - type: mcp
    namespace: infra-terraform
    port: 8080
    tools:
    - name: review-terraform-run
      description: Given a Terraform Cloud run ID and workspace name, retrieve the plan diff summary and post it to the platform-engineering Slack channel for human approval.
      inputParameters:
      - name: run_id
        in: body
        type: string
        description: The Terraform Cloud run ID pending review (e.g., run-XyZaBcDe).
      - name: workspace
        in: body
        type: string
        description: The Terraform Cloud workspace name.
      steps:
      - name: get-run
        type: call
        call: terraform.get-run
        with:
          run_id: '{{run_id}}'
      - name: post-review
        type: call
        call: slack-tf.post-message
        with:
          channel: platform-engineering
          text: 'Terraform run {{run_id}} in {{workspace}} needs approval. Changes: {{get-run.resourceChanges}} | Status: {{get-run.status}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: runs
      path: /runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-run
        method: GET
  - type: http
    namespace: slack-tf
    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 → terraform-cloud-plan-review-and-notification.yml

Returns metadata for a GitHub repository including language, stars, open issues, and last push date.

naftiko: '0.5'
info:
  label: GitHub Repository Info Lookup
  description: Returns metadata for a GitHub repository including language, stars, open issues, and last push date.
  tags:
  - devops
  - github
  - repository
capability:
  exposes:
  - type: mcp
    namespace: github-repo
    port: 8080
    tools:
    - name: get-repo-info
      description: Given an org and repo name, return repository metadata including primary language, stars, open issues, and last push timestamp.
      inputParameters:
      - name: org
        in: body
        type: string
        description: The GitHub organization name.
      - name: repo
        in: body
        type: string
        description: The GitHub repository name.
      call: github-api.get-repo
      with:
        org: '{{org}}'
        repo: '{{repo}}'
      outputParameters:
      - name: language
        type: string
        mapping: $.language
      - name: stars
        type: number
        mapping: $.stargazers_count
      - name: open_issues
        type: number
        mapping: $.open_issues_count
      - name: last_push
        type: string
        mapping: $.pushed_at
  consumes:
  - type: http
    namespace: github-api
    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

Creates a new runbook page in Confluence from a template, links it to the relevant Jira epic, and notifies the team via Slack.

naftiko: '0.5'
info:
  label: Confluence Runbook Publish and Notify
  description: Creates a new runbook page in Confluence from a template, links it to the relevant Jira epic, and notifies the team via Slack.
  tags:
  - documentation
  - confluence
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: runbook-publish
    port: 8080
    tools:
    - name: publish-runbook
      description: Given runbook content and a Jira epic key, create a Confluence page, link it to the epic, and notify the team.
      inputParameters:
      - name: title
        in: body
        type: string
        description: Runbook title.
      - name: content
        in: body
        type: string
        description: Runbook content in storage format.
      - name: epic_key
        in: body
        type: string
        description: The Jira epic key to link.
      steps:
      - name: create-page
        type: call
        call: confluence-api.create-page
        with:
          title: '{{title}}'
          content: '{{content}}'
          spaceKey: RUNBOOKS
      - name: link-to-jira
        type: call
        call: jira-api.add-remote-link
        with:
          issue_key: '{{epic_key}}'
          url: '{{create-page.url}}'
          title: 'Runbook: {{title}}'
      - name: notify-team
        type: call
        call: slack-api.post-message
        with:
          channel: platform-engineering
          text: 'New runbook published: {{title}} | Confluence: {{create-page.url}} | Epic: {{epic_key}}'
  consumes:
  - type: http
    namespace: confluence-api
    baseUri: https://salesforce.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_token
    resources:
    - name: content
      path: /content
      operations:
      - name: create-page
        method: POST
  - type: http
    namespace: jira-api
    baseUri: https://salesforce.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: remote-links
      path: /issue/{{issue_key}}/remotelink
      inputParameters:
      - name: issue_key
        in: path
      operations:
      - name: add-remote-link
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → confluence-runbook-publish-and-notify.yml

Returns the Einstein prediction score and factors for a given Salesforce record for AI-driven decision support.

naftiko: '0.5'
info:
  label: Salesforce Einstein Prediction Lookup
  description: Returns the Einstein prediction score and factors for a given Salesforce record for AI-driven decision support.
  tags:
  - crm
  - salesforce
  - salesforce-einstein
  - ai
capability:
  exposes:
  - type: mcp
    namespace: einstein-predictions
    port: 8080
    tools:
    - name: get-prediction
      description: Given a Salesforce record ID and prediction definition ID, return the Einstein prediction score and contributing factors.
      inputParameters:
      - name: record_id
        in: body
        type: string
        description: The Salesforce record ID to predict on.
      - name: prediction_id
        in: body
        type: string
        description: The Einstein prediction definition ID.
      call: einstein-api.get-prediction
      with:
        record_id: '{{record_id}}'
        prediction_id: '{{prediction_id}}'
      outputParameters:
      - name: score
        type: number
        mapping: $.prediction.score
      - name: factors
        type: array
        mapping: $.prediction.factors
  consumes:
  - type: http
    namespace: einstein-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0/smartdatadiscovery
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: predictions
      path: /predict
      operations:
      - name: get-prediction
        method: POST
Open in Framework → View in Fleet → salesforce-einstein-prediction-lookup.yml

When a new audience segment is created in Data Cloud, activates it in Marketing Cloud, triggers a campaign, and reports activation metrics to Slack.

naftiko: '0.5'
info:
  label: Salesforce Data Cloud Segment Activation
  description: When a new audience segment is created in Data Cloud, activates it in Marketing Cloud, triggers a campaign, and reports activation metrics to Slack.
  tags:
  - crm
  - salesforce
  - salesforce-marketing-cloud
  - slack
  - marketing
capability:
  exposes:
  - type: mcp
    namespace: segment-activation
    port: 8080
    tools:
    - name: activate-segment
      description: Given a Data Cloud segment ID, activate in Marketing Cloud, trigger the campaign, and report to Slack.
      inputParameters:
      - name: segment_id
        in: body
        type: string
        description: The Data Cloud segment ID.
      - name: campaign_name
        in: body
        type: string
        description: The Marketing Cloud campaign name.
      steps:
      - name: get-segment
        type: call
        call: sfdc-api.get-segment
        with:
          segment_id: '{{segment_id}}'
      - name: activate-mc
        type: call
        call: mc-api.activate-audience
        with:
          segment_id: '{{segment_id}}'
          campaign_name: '{{campaign_name}}'
      - name: report-activation
        type: call
        call: slack-api.post-message
        with:
          channel: marketing-ops
          text: 'Segment activated: {{segment_id}} | Audience: {{get-segment.memberCount}} | Campaign: {{campaign_name}} | Status: {{activate-mc.status}}'
  consumes:
  - type: http
    namespace: sfdc-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: segments
      path: /connect/cdp/segments/{{segment_id}}
      inputParameters:
      - name: segment_id
        in: path
      operations:
      - name: get-segment
        method: GET
  - type: http
    namespace: mc-api
    baseUri: https://mcapi.salesforce.com/v1
    authentication:
      type: bearer
      token: $secrets.marketing_cloud_token
    resources:
    - name: activations
      path: /audiences/activate
      operations:
      - name: activate-audience
        method: POST
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-data-cloud-segment-activation.yml

Queries Snowflake task execution history for failures in the last 24 hours and posts a pipeline health digest to the data engineering Slack channel.

naftiko: '0.5'
info:
  label: Snowflake Data Pipeline Monitoring
  description: Queries Snowflake task execution history for failures in the last 24 hours and posts a pipeline health digest to the data engineering Slack channel.
  tags:
  - data
  - snowflake
  - slack
  - monitoring
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: data-ops
    port: 8080
    tools:
    - name: check-pipeline-health
      description: Query Snowflake task history for any failed or overdue pipeline steps in the past 24 hours and post a health summary to the data engineering Slack channel.
      inputParameters:
      - name: database
        in: body
        type: string
        description: The Snowflake database to check pipeline health for.
      - name: hours_back
        in: body
        type: integer
        description: Number of hours of history to check (e.g., 24).
      steps:
      - name: get-task-history
        type: call
        call: snowflake-ops.query-task-history
        with:
          database: '{{database}}'
          hoursBack: '{{hours_back}}'
      - name: post-summary
        type: call
        call: slack-data.post-message
        with:
          channel: data-engineering
          text: 'Snowflake pipeline health for {{database}} (last {{hours_back}}h): {{get-task-history.summary}}'
  consumes:
  - type: http
    namespace: snowflake-ops
    baseUri: https://salesforce.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: task-history
      path: /databases/{{database}}/tasks/history
      inputParameters:
      - name: database
        in: path
      operations:
      - name: query-task-history
        method: GET
  - type: http
    namespace: slack-data
    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 → snowflake-data-pipeline-monitoring.yml

When a time-off request is submitted in Workday, notifies the employee's manager in Slack so they can plan coverage without manual follow-up.

naftiko: '0.5'
info:
  label: Workday Time-Off Request Notification
  description: When a time-off request is submitted in Workday, notifies the employee's manager in Slack so they can plan coverage without manual follow-up.
  tags:
  - hr
  - workday
  - slack
  - leave-management
capability:
  exposes:
  - type: mcp
    namespace: hr-leave
    port: 8080
    tools:
    - name: notify-timeoff-request
      description: Given a Workday time-off request ID, retrieve the request details and send a notification to the employee's manager in Slack.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: The Workday time-off request ID.
      steps:
      - name: get-request
        type: call
        call: workday-leave.get-timeoff-request
        with:
          request_id: '{{request_id}}'
      - name: notify-manager
        type: call
        call: slack-leave.post-message
        with:
          channel: '{{get-request.managerSlackId}}'
          text: '{{get-request.employeeName}} submitted a time-off request from {{get-request.startDate}} to {{get-request.endDate}}. Please review in Workday.'
  consumes:
  - type: http
    namespace: workday-leave
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: timeoff-requests
      path: /salesforce/timeOffRequests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-timeoff-request
        method: GET
  - type: http
    namespace: slack-leave
    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 → workday-time-off-request-notification.yml

Returns the current status, sender, and recipient statuses of a DocuSign envelope by envelope ID.

naftiko: '0.5'
info:
  label: DocuSign Envelope Status Lookup
  description: Returns the current status, sender, and recipient statuses of a DocuSign envelope by envelope ID.
  tags:
  - legal
  - docusign
  - contracts
capability:
  exposes:
  - type: mcp
    namespace: docusign-status
    port: 8080
    tools:
    - name: get-envelope-status
      description: Given a DocuSign envelope ID, return its status, sender, and recipient completion statuses.
      inputParameters:
      - name: envelope_id
        in: body
        type: string
        description: The DocuSign envelope ID.
      call: docusign-api.get-envelope
      with:
        envelope_id: '{{envelope_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: sender
        type: string
        mapping: $.sender.userName
      - name: recipients
        type: array
        mapping: $.recipients.signers
  consumes:
  - type: http
    namespace: docusign-api
    baseUri: https://na4.docusign.net/restapi/v2.1
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /accounts/$secrets.docusign_account_id/envelopes/{{envelope_id}}
      inputParameters:
      - name: envelope_id
        in: path
      operations:
      - name: get-envelope
        method: GET
Open in Framework → View in Fleet → docusign-envelope-status-lookup.yml

Queries Snowflake for account distribution metrics, updates territory assignments in Sales Cloud, and notifies affected reps via Slack.

naftiko: '0.5'
info:
  label: Salesforce Sales Cloud Territory Rebalance
  description: Queries Snowflake for account distribution metrics, updates territory assignments in Sales Cloud, and notifies affected reps via Slack.
  tags:
  - crm
  - salesforce
  - salesforce-sales-cloud
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: territory-rebalance
    port: 8080
    tools:
    - name: rebalance-territories
      description: Given a territory model ID, query distribution metrics, update Sales Cloud assignments, and notify reps.
      inputParameters:
      - name: territory_model_id
        in: body
        type: string
        description: The Salesforce territory model ID.
      steps:
      - name: get-metrics
        type: call
        call: snowflake-api.run-query
        with:
          territory_model_id: '{{territory_model_id}}'
      - name: apply-updates
        type: call
        call: sfdc-api.update-territories
        with:
          model_id: '{{territory_model_id}}'
          assignments: '{{get-metrics.data.new_assignments}}'
      - name: notify-reps
        type: call
        call: slack-api.post-message
        with:
          channel: sales-operations
          text: 'Territory rebalance complete for model {{territory_model_id}} | Accounts moved: {{get-metrics.data.accounts_moved}} | Reps affected: {{get-metrics.data.reps_affected}}'
  consumes:
  - type: http
    namespace: snowflake-api
    baseUri: https://salesforce.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: sfdc-api
    baseUri: https://salesforce.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: territories
      path: /sobjects/Territory2
      operations:
      - name: update-territories
        method: PATCH
  - type: http
    namespace: slack-api
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → salesforce-sales-cloud-territory-rebalance.yml

Posts a goods receipt in SAP S/4HANA for an incoming delivery and updates the corresponding Ariba purchase order status.

naftiko: '0.5'
info:
  label: SAP Materials Management Goods Receipt
  description: Posts a goods receipt in SAP S/4HANA for an incoming delivery and updates the corresponding Ariba purchase order status.
  tags:
  - procurement
  - supply-chain
  - sap-s4hana
  - sap-ariba
  - goods-receipt
capability:
  exposes:
  - type: mcp
    namespace: supply-chain-ops
    port: 8080
    tools:
    - name: post-goods-receipt
      description: Given a delivery number and PO number, post a goods receipt in SAP S/4HANA Materials Management and update the Ariba PO status to received.
      inputParameters:
      - name: delivery_number
        in: body
        type: string
        description: SAP inbound delivery number.
      - name: po_number
        in: body
        type: string
        description: Ariba purchase order number to update.
      steps:
      - name: post-gr
        type: call
        call: sap-mm-gr.post-goods-receipt
        with:
          deliveryNumber: '{{delivery_number}}'
      - name: update-ariba-po
        type: call
        call: ariba-po.update-po-status
        with:
          poNumber: '{{po_number}}'
          status: received
          materialDocNumber: '{{post-gr.materialDocument}}'
  consumes:
  - type: http
    namespace: sap-mm-gr
    baseUri: https://sap-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-receipts
      path: /A_MaterialDocumentHeader
      operations:
      - name: post-goods-receipt
        method: POST
  - type: http
    namespace: ariba-po
    baseUri: https://openapi.ariba.com/api/purchase-orders/v2
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: po-status
      path: /orders/{{poNumber}}/status
      inputParameters:
      - name: poNumber
        in: path
      operations:
      - name: update-po-status
        method: PATCH
Open in Framework → View in Fleet → sap-materials-management-goods-receipt.yml

Initiates a performance review cycle in SAP SuccessFactors for a given employee population and sends kick-off instructions to managers via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP SuccessFactors Performance Review Kickoff
  description: Initiates a performance review cycle in SAP SuccessFactors for a given employee population and sends kick-off instructions to managers via Microsoft Teams.
  tags:
  - hr
  - performance
  - sap-successfactors
  - microsoft-teams
  - performance-management
capability:
  exposes:
  - type: mcp
    namespace: performance-hr
    port: 8080
    tools:
    - name: kickoff-performance-review
      description: Launch a SuccessFactors performance review form for a list of employees and notify each manager in Teams with review instructions and due date.
      inputParameters:
      - name: review_template_id
        in: body
        type: string
        description: SuccessFactors performance review template ID.
      - name: population_query
        in: body
        type: string
        description: OData filter expression to select the employee population, e.g. department eq 'Engineering'.
      - name: due_date
        in: body
        type: string
        description: Review due date in ISO 8601 format.
      - name: manager_teams_channel_id
        in: body
        type: string
        description: Teams channel ID to notify managers.
      steps:
      - name: get-employees
        type: call
        call: sf-perf.get-employee-population
        with:
          filter: '{{population_query}}'
      - name: launch-reviews
        type: call
        call: sf-perf.create-performance-review
        with:
          templateId: '{{review_template_id}}'
          employeeIds: '{{get-employees.ids}}'
          dueDate: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams-perf.send-channel-message
        with:
          channelId: '{{manager_teams_channel_id}}'
          text: 'Performance review cycle launched for {{get-employees.count}} employees. Due: {{due_date}}. Please complete reviews in SuccessFactors by the deadline.'
  consumes:
  - type: http
    namespace: sf-perf
    baseUri: https://api4.successfactors.com/odata/v2
    authentication:
      type: bearer
      token: $secrets.sf_token
    resources:
    - name: employee-population
      path: /EmpJob
      inputParameters:
      - name: filter
        in: query
      operations:
      - name: get-employee-population
        method: GET
    - name: performance-reviews
      path: /PerformanceReview
      operations:
      - name: create-performance-review
        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/{{teamId}}/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sap-successfactors-performance-review-kickoff.yml

Triggers a GitHub Actions deployment workflow to push an application to SAP BTP Cloud Foundry and reports the deployment status back in a Jira release ticket.

naftiko: '0.5'
info:
  label: GitHub Actions Deployment to SAP BTP Cloud Foundry
  description: Triggers a GitHub Actions deployment workflow to push an application to SAP BTP Cloud Foundry and reports the deployment status back in a Jira release ticket.
  tags:
  - devops
  - cicd
  - github
  - sap-btp
  - jira
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: btp-deploy
    port: 8080
    tools:
    - name: trigger-btp-deployment
      description: Given a GitHub repo, branch, and Jira release ticket key, trigger a GitHub Actions workflow to deploy to SAP BTP Cloud Foundry and update the Jira ticket with the deployment result.
      inputParameters:
      - name: github_repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: branch
        in: body
        type: string
        description: Branch name to deploy from.
      - name: jira_ticket_key
        in: body
        type: string
        description: Jira release ticket key to update with deployment status.
      steps:
      - name: trigger-workflow
        type: call
        call: github-deploy.trigger-workflow
        with:
          repo: '{{github_repo}}'
          ref: '{{branch}}'
          workflow: deploy-btp.yml
      - name: update-jira-ticket
        type: call
        call: jira-deploy.add-comment
        with:
          issueKey: '{{jira_ticket_key}}'
          comment: 'BTP deployment triggered from branch {{branch}}. GitHub run ID: {{trigger-workflow.runId}}'
  consumes:
  - type: http
    namespace: github-deploy
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-dispatches
      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: jira-deploy
    baseUri: https://sap.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issue-comments
      path: /issue/{{issueKey}}/comment
      inputParameters:
      - name: issueKey
        in: path
      operations:
      - name: add-comment
        method: POST
Open in Framework → View in Fleet → github-actions-deployment-to-sap-btp-cloud-foundry.yml

When a GitHub pull request merges to main, creates a corresponding SAP transport request in the development landscape and assigns it to the developer.

naftiko: '0.5'
info:
  label: GitHub PR Merge to SAP Transport
  description: When a GitHub pull request merges to main, creates a corresponding SAP transport request in the development landscape and assigns it to the developer.
  tags:
  - devops
  - cicd
  - github
  - sap-transport
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: sap-devops
    port: 8080
    tools:
    - name: create-transport-from-pr
      description: Given a merged GitHub pull request number and repo, create a SAP Workbench transport request and assign the developer. Use to automate ABAP change management from GitHub workflow events.
      inputParameters:
      - name: pr_number
        in: body
        type: integer
        description: GitHub pull request number that was merged.
      - name: repo
        in: body
        type: string
        description: GitHub repo in owner/repo format.
      - name: sap_developer_id
        in: body
        type: string
        description: SAP user ID of the developer to assign the transport to.
      steps:
      - name: get-pr
        type: call
        call: github.get-pull-request
        with:
          repo: '{{repo}}'
          pull_number: '{{pr_number}}'
      - name: create-transport
        type: call
        call: sap-cts.create-transport
        with:
          description: '{{get-pr.title}} (PR #{{pr_number}})'
          owner: '{{sap_developer_id}}'
          targetSystem: QAS
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pull-requests
      path: /repos/{{repo}}/pulls/{{pull_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
  - type: http
    namespace: sap-cts
    baseUri: https://sap-s4.sap.com/sap/opu/odata/sap/CTS_API_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: transports
      path: /TransportRequests
      operations:
      - name: create-transport
        method: POST
Open in Framework → View in Fleet → github-pr-merge-to-sap-transport.yml

Enrolls an employee in a mandatory training course in SAP SuccessFactors Learning and sends a calendar invite via Microsoft 365.

naftiko: '0.5'
info:
  label: SAP SuccessFactors Learning Enrollment
  description: Enrolls an employee in a mandatory training course in SAP SuccessFactors Learning and sends a calendar invite via Microsoft 365.
  tags:
  - hr
  - learning
  - sap-successfactors
  - microsoft-365
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: learning-ops
    port: 8080
    tools:
    - name: enroll-employee-training
      description: Given an employee ID and course ID, enroll the employee in SuccessFactors Learning and send an Outlook calendar event for the training session.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: SuccessFactors employee ID.
      - name: course_id
        in: body
        type: string
        description: SuccessFactors Learning course ID.
      - name: training_date
        in: body
        type: string
        description: ISO 8601 date for the training session, e.g. 2026-04-15.
      steps:
      - name: enroll
        type: call
        call: sf-learning.enroll-user
        with:
          userId: '{{employee_id}}'
          courseId: '{{course_id}}'
      - name: get-employee-email
        type: call
        call: sf-hr.get-employee-email
        with:
          employeeId: '{{employee_id}}'
      - name: send-calendar-invite
        type: call
        call: m365.create-calendar-event
        with:
          recipientEmail: '{{get-employee-email.email}}'
          subject: 'Mandatory Training: {{enroll.courseTitle}}'
          startDate: '{{training_date}}'
  consumes:
  - type: http
    namespace: sf-learning
    baseUri: https://api4.successfactors.com/learning/odatav4/public
    authentication:
      type: bearer
      token: $secrets.sf_token
    resources:
    - name: enrollments
      path: /enrollments
      operations:
      - name: enroll-user
        method: POST
  - type: http
    namespace: sf-hr
    baseUri: https://api4.successfactors.com/odata/v2
    authentication:
      type: bearer
      token: $secrets.sf_token
    resources:
    - name: employee-emails
      path: /PerEmail(personIdExternal='{{employeeId}}')
      inputParameters:
      - name: employeeId
        in: path
      operations:
      - name: get-employee-email
        method: GET
  - type: http
    namespace: m365
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: calendar-events
      path: /users/{{recipientEmail}}/events
      inputParameters:
      - name: recipientEmail
        in: path
      operations:
      - name: create-calendar-event
        method: POST
Open in Framework → View in Fleet → sap-successfactors-learning-enrollment.yml

Reads a customer record from SAP S/4HANA, enriches it with firmographic data from ZoomInfo, and updates the Salesforce account record.

naftiko: '0.5'
info:
  label: Customer Master Data Enrichment
  description: Reads a customer record from SAP S/4HANA, enriches it with firmographic data from ZoomInfo, and updates the Salesforce account record.
  tags:
  - crm
  - sales
  - sap-s4hana
  - salesforce
  - zoominfo
  - data-enrichment
capability:
  exposes:
  - type: mcp
    namespace: crm-enrichment
    port: 8080
    tools:
    - name: enrich-customer-record
      description: Given a SAP customer number and Salesforce account ID, fetch the customer from SAP, enrich with ZoomInfo firmographics, and update Salesforce. Use for data quality improvement workflows.
      inputParameters:
      - name: customer_number
        in: body
        type: string
        description: SAP customer number to look up.
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce account ID to update with enriched data.
      steps:
      - name: get-customer
        type: call
        call: sap-customer.get-customer
        with:
          Customer: '{{customer_number}}'
      - name: enrich-firmographic
        type: call
        call: zoominfo.search-company
        with:
          companyName: '{{get-customer.CustomerName}}'
          website: '{{get-customer.WebsiteURL}}'
      - name: update-salesforce
        type: call
        call: salesforce.update-account
        with:
          accountId: '{{salesforce_account_id}}'
          employeeCount: '{{enrich-firmographic.employeeCount}}'
          revenue: '{{enrich-firmographic.revenue}}'
          industry: '{{enrich-firmographic.industry}}'
  consumes:
  - type: http
    namespace: sap-customer
    baseUri: https://sap-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}}')
      inputParameters:
      - name: Customer
        in: path
      operations:
      - name: get-customer
        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
    baseUri: https://sap.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 → customer-master-data-enrichment.yml

Retrieves a SAP S/4HANA purchase order by number, returning header status, vendor details, and open line items for procurement review.

naftiko: '0.5'
info:
  label: Purchase Order Lookup
  description: Retrieves a SAP S/4HANA purchase order by number, returning header status, vendor details, and open line items for procurement review.
  tags:
  - procurement
  - erp
  - sap-s4hana
capability:
  exposes:
  - type: mcp
    namespace: erp
    port: 8080
    tools:
    - name: get-purchase-order
      description: Given a PO number, look up the SAP S/4HANA purchase order and return header status, vendor name, total value, currency, and open line items.
      inputParameters:
      - name: po_number
        in: body
        type: string
        description: The SAP purchase order number, e.g. 4500001234.
      call: sap-mm.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-mm
    baseUri: https://sap-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 → purchase-order-lookup.yml

Queries Datadog for SAP BTP resource cost spikes, summarizes anomalies using OpenAI, and creates a Jira cost-review ticket with the AI summary.

naftiko: '0.5'
info:
  label: SAP Cloud Cost Anomaly Detection
  description: Queries Datadog for SAP BTP resource cost spikes, summarizes anomalies using OpenAI, and creates a Jira cost-review ticket with the AI summary.
  tags:
  - cloud
  - cost-management
  - datadog
  - openai
  - sap-btp
  - jira
  - ai
capability:
  exposes:
  - type: mcp
    namespace: cost-anomaly
    port: 8080
    tools:
    - name: detect-cloud-cost-anomaly
      description: Query Datadog metrics for BTP cost anomalies over a time window, generate a human-readable summary with OpenAI, and open a Jira ticket for finance review.
      inputParameters:
      - name: time_window_hours
        in: body
        type: integer
        description: Hours of historical cost data to analyze for anomalies.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for the cost-review ticket.
      steps:
      - name: get-cost-metrics
        type: call
        call: datadog-cost.query-metrics
        with:
          query: sum:btp.cost.total{*}
          hours: '{{time_window_hours}}'
      - name: summarize-anomalies
        type: call
        call: openai-cost.summarize-anomalies
        with:
          metricsData: '{{get-cost-metrics.series}}'
      - name: create-review-ticket
        type: call
        call: jira-cost.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: BTP cost anomaly detected — review required
          description: '{{summarize-anomalies.summary}}'
  consumes:
  - type: http
    namespace: datadog-cost
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apikey
      key: DD-API-KEY
      value: $secrets.datadog_api_key
      placement: header
    resources:
    - name: metrics
      path: /query
      inputParameters:
      - name: query
        in: query
      - name: hours
        in: query
      operations:
      - name: query-metrics
        method: GET
  - type: http
    namespace: openai-cost
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_token
    resources:
    - name: chat-completions
      path: /chat/completions
      operations:
      - name: summarize-anomalies
        method: POST
  - type: http
    namespace: jira-cost
    baseUri: https://sap.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-cloud-cost-anomaly-detection.yml

When a Qualtrics NPS survey response is submitted for a customer account, fetches the response, updates the Salesforce account NPS score, and logs the feedback in a Jira customer-success ticket.

naftiko: '0.5'
info:
  label: SAP Qualtrics Survey Response to CRM
  description: When a Qualtrics NPS survey response is submitted for a customer account, fetches the response, updates the Salesforce account NPS score, and logs the feedback in a Jira customer-success ticket.
  tags:
  - crm
  - customer-success
  - qualtrics
  - salesforce
  - jira
  - nps
capability:
  exposes:
  - type: mcp
    namespace: cx-feedback
    port: 8080
    tools:
    - name: process-nps-response
      description: Given a Qualtrics survey response ID and Salesforce account ID, fetch the NPS response, update the Salesforce account score, and log feedback in Jira. Use for closing the NPS feedback loop.
      inputParameters:
      - name: response_id
        in: body
        type: string
        description: Qualtrics survey response ID.
      - name: survey_id
        in: body
        type: string
        description: Qualtrics survey ID the response belongs to.
      - name: salesforce_account_id
        in: body
        type: string
        description: Salesforce account ID to update with the NPS score.
      steps:
      - name: get-response
        type: call
        call: qualtrics.get-response
        with:
          surveyId: '{{survey_id}}'
          responseId: '{{response_id}}'
      - name: update-sf-nps
        type: call
        call: salesforce-nps.update-account
        with:
          accountId: '{{salesforce_account_id}}'
          npsScore: '{{get-response.npsScore}}'
          verbatim: '{{get-response.verbatim}}'
      - name: log-feedback
        type: call
        call: jira-cx.create-issue
        with:
          project_key: CS
          issuetype: Task
          summary: 'NPS feedback received: score {{get-response.npsScore}}'
          description: 'Account: {{salesforce_account_id}}

            Score: {{get-response.npsScore}}

            Feedback: {{get-response.verbatim}}'
  consumes:
  - type: http
    namespace: qualtrics
    baseUri: https://sap.qualtrics.com/API/v3
    authentication:
      type: apikey
      key: X-API-TOKEN
      value: $secrets.qualtrics_token
      placement: header
    resources:
    - name: survey-responses
      path: /surveys/{{surveyId}}/responses/{{responseId}}
      inputParameters:
      - name: surveyId
        in: path
      - name: responseId
        in: path
      operations:
      - name: get-response
        method: GET
  - type: http
    namespace: salesforce-nps
    baseUri: https://sap.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: account-nps
      path: /sobjects/Account/{{accountId}}
      inputParameters:
      - name: accountId
        in: path
      operations:
      - name: update-account
        method: PATCH
  - type: http
    namespace: jira-cx
    baseUri: https://sap.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-qualtrics-survey-response-to-crm.yml

Creates a new Terraform Cloud workspace for a SAP BTP subaccount and stores the workspace ID in a GitHub repository secret for CI/CD pipelines.

naftiko: '0.5'
info:
  label: Terraform Cloud Workspace Provisioning for BTP
  description: Creates a new Terraform Cloud workspace for a SAP BTP subaccount and stores the workspace ID in a GitHub repository secret for CI/CD pipelines.
  tags:
  - cloud
  - infrastructure
  - terraform
  - sap-btp
  - github
  - devops
capability:
  exposes:
  - type: mcp
    namespace: infra-provisioning
    port: 8080
    tools:
    - name: provision-btp-workspace
      description: Given a BTP subaccount name and GitHub repo, create a Terraform Cloud workspace scoped to the BTP subaccount and store the workspace ID as a GitHub Actions secret.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: Name for the new Terraform Cloud workspace.
      - name: terraform_org
        in: body
        type: string
        description: Terraform Cloud organization name.
      - name: github_repo
        in: body
        type: string
        description: GitHub repo (owner/repo) to store the workspace ID secret.
      steps:
      - name: create-workspace
        type: call
        call: terraform.create-workspace
        with:
          orgName: '{{terraform_org}}'
          workspaceName: '{{workspace_name}}'
      - name: store-secret
        type: call
        call: github-infra.create-repo-secret
        with:
          repo: '{{github_repo}}'
          secretName: TF_WORKSPACE_ID
          secretValue: '{{create-workspace.workspaceId}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: workspaces
      path: /organizations/{{orgName}}/workspaces
      inputParameters:
      - name: orgName
        in: path
      operations:
      - name: create-workspace
        method: POST
  - type: http
    namespace: github-infra
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: repo-secrets
      path: /repos/{{repo}}/actions/secrets/{{secretName}}
      inputParameters:
      - name: repo
        in: path
      - name: secretName
        in: path
      operations:
      - name: create-repo-secret
        method: PUT
Open in Framework → View in Fleet → terraform-cloud-workspace-provisioning-for-btp.yml

Fetches open production orders from SAP S/4HANA PP module and publishes a daily status digest to a SharePoint list for plant operations.

naftiko: '0.5'
info:
  label: SAP Production Order Status Digest
  description: Fetches open production orders from SAP S/4HANA PP module and publishes a daily status digest to a SharePoint list for plant operations.
  tags:
  - manufacturing
  - erp
  - sap-s4hana
  - sharepoint
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: manufacturing-reporting
    port: 8080
    tools:
    - name: digest-production-orders
      description: Fetch all open production orders for a given plant from SAP S/4HANA and write the status digest to a SharePoint list. Use for daily manufacturing status reporting.
      inputParameters:
      - name: plant
        in: body
        type: string
        description: SAP plant code, e.g. 1000.
      - name: sharepoint_site_id
        in: body
        type: string
        description: SharePoint site ID where the digest list resides.
      - name: list_id
        in: body
        type: string
        description: SharePoint list ID to write digest items to.
      steps:
      - name: get-orders
        type: call
        call: sap-pp.get-production-orders
        with:
          Plant: '{{plant}}'
          SystemStatus: REL
      - name: write-digest
        type: call
        call: sharepoint-mfg.create-list-item
        with:
          siteId: '{{sharepoint_site_id}}'
          listId: '{{list_id}}'
          orderData: '{{get-orders.value}}'
  consumes:
  - type: http
    namespace: sap-pp
    baseUri: https://sap-s4.sap.com/sap/opu/odata/sap/API_PRODUCTION_ORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: production-orders
      path: /A_ProductionOrder
      inputParameters:
      - name: Plant
        in: query
      - name: SystemStatus
        in: query
      operations:
      - name: get-production-orders
        method: GET
  - type: http
    namespace: sharepoint-mfg
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: list-items
      path: /sites/{{siteId}}/lists/{{listId}}/items
      inputParameters:
      - name: siteId
        in: path
      - name: listId
        in: path
      operations:
      - name: create-list-item
        method: POST
Open in Framework → View in Fleet → sap-production-order-status-digest.yml

When a Salesforce opportunity closes as won, creates a corresponding sales order in SAP S/4HANA and syncs the order number back to the Salesforce opportunity.

naftiko: '0.5'
info:
  label: Salesforce Opportunity to SAP Sales Order
  description: When a Salesforce opportunity closes as won, creates a corresponding sales order in SAP S/4HANA and syncs the order number back to the Salesforce opportunity.
  tags:
  - sales
  - crm
  - erp
  - salesforce
  - sap-s4hana
  - order-management
capability:
  exposes:
  - type: mcp
    namespace: sales-ops
    port: 8080
    tools:
    - name: create-sales-order-from-opportunity
      description: Given a Salesforce opportunity ID that has closed-won, fetch opportunity details and create a SAP S/4HANA sales order, then write the SAP order number back to Salesforce.
      inputParameters:
      - name: opportunity_id
        in: body
        type: string
        description: Salesforce opportunity ID with Stage = Closed Won.
      steps:
      - name: get-opportunity
        type: call
        call: salesforce-opp.get-opportunity
        with:
          opportunityId: '{{opportunity_id}}'
      - name: create-so
        type: call
        call: sap-sd.create-sales-order
        with:
          soldToParty: '{{get-opportunity.AccountId}}'
          orderValue: '{{get-opportunity.Amount}}'
          currency: '{{get-opportunity.CurrencyIsoCode}}'
      - name: update-opportunity
        type: call
        call: salesforce-update.update-opportunity
        with:
          opportunityId: '{{opportunity_id}}'
          sapOrderNumber: '{{create-so.SalesOrder}}'
  consumes:
  - type: http
    namespace: salesforce-opp
    baseUri: https://sap.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunities
      path: /sobjects/Opportunity/{{opportunityId}}
      inputParameters:
      - name: opportunityId
        in: path
      operations:
      - name: get-opportunity
        method: GET
  - type: http
    namespace: sap-sd
    baseUri: https://sap-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-update
    baseUri: https://sap.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: opportunity-update
      path: /sobjects/Opportunity/{{opportunityId}}
      inputParameters:
      - name: opportunityId
        in: path
      operations:
      - name: update-opportunity
        method: PATCH
Open in Framework → View in Fleet → salesforce-opportunity-to-sap-sales-order.yml

Accepts a receipt image URL, submits it to an AI model for OCR and category extraction, and creates a SAP Concur quick expense entry.

naftiko: '0.5'
info:
  label: SAP Concur Receipt OCR and Categorization
  description: Accepts a receipt image URL, submits it to an AI model for OCR and category extraction, and creates a SAP Concur quick expense entry.
  tags:
  - finance
  - ai
  - sap-concur
  - openai
  - expense-management
capability:
  exposes:
  - type: mcp
    namespace: expense-ai
    port: 8080
    tools:
    - name: process-receipt
      description: Given a receipt image URL, use OpenAI vision to extract vendor, amount, date, and category, then create a Concur quick expense. Use for automated receipt processing from email or mobile captures.
      inputParameters:
      - name: receipt_image_url
        in: body
        type: string
        description: Public URL to the receipt image (JPEG or PNG).
      - name: employee_login
        in: body
        type: string
        description: SAP Concur login ID of the employee submitting the expense.
      steps:
      - name: ocr-receipt
        type: call
        call: openai.extract-receipt
        with:
          imageUrl: '{{receipt_image_url}}'
      - name: create-expense
        type: call
        call: concur-expense.create-quick-expense
        with:
          loginId: '{{employee_login}}'
          vendor: '{{ocr-receipt.vendor}}'
          amount: '{{ocr-receipt.amount}}'
          expenseDate: '{{ocr-receipt.date}}'
          expenseCategory: '{{ocr-receipt.category}}'
  consumes:
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_token
    resources:
    - name: chat-completions
      path: /chat/completions
      operations:
      - name: extract-receipt
        method: POST
  - type: http
    namespace: concur-expense
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: quick-expenses
      path: /expense/quickexpenses
      operations:
      - name: create-quick-expense
        method: POST
Open in Framework → View in Fleet → sap-concur-receipt-ocr-and-categorization.yml

Fetches an open vendor invoice from SAP Ariba, posts the approval decision back to SAP S/4HANA, and notifies the requester via Microsoft Teams.

naftiko: '0.5'
info:
  label: Vendor Invoice Processing
  description: Fetches an open vendor invoice from SAP Ariba, posts the approval decision back to SAP S/4HANA, and notifies the requester via Microsoft Teams.
  tags:
  - finance
  - procurement
  - sap-ariba
  - sap-s4hana
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: finance-ops
    port: 8080
    tools:
    - name: approve-vendor-invoice
      description: Given an Ariba invoice ID and approval decision, post the approval to SAP S/4HANA AP and notify the vendor contact via Microsoft Teams.
      inputParameters:
      - name: invoice_id
        in: body
        type: string
        description: The Ariba invoice ID to approve or reject.
      - name: decision
        in: body
        type: string
        description: 'Approval decision: ''approve'' or ''reject''.'
      - name: approver_upn
        in: body
        type: string
        description: UPN of the approver for Teams notification.
      steps:
      - name: get-invoice
        type: call
        call: ariba.get-invoice
        with:
          invoiceId: '{{invoice_id}}'
      - name: post-approval
        type: call
        call: sap-fi.post-invoice-approval
        with:
          invoice_id: '{{invoice_id}}'
          decision: '{{decision}}'
          vendor_id: '{{get-invoice.vendorId}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{approver_upn}}'
          text: 'Invoice {{invoice_id}} has been {{decision}}d. SAP posting: {{post-approval.documentNumber}}'
  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/{{invoiceId}}
      inputParameters:
      - name: invoiceId
        in: path
      operations:
      - name: get-invoice
        method: GET
  - type: http
    namespace: sap-fi
    baseUri: https://sap-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: invoice-approvals
      path: /A_SupplierInvoice
      operations:
      - name: post-invoice-approval
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: chat-messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → vendor-invoice-processing.yml

When a new contingent worker is approved in SAP Fieldglass, provisions their Microsoft Entra ID guest account and opens a ServiceNow onboarding task.

naftiko: '0.5'
info:
  label: SAP Fieldglass Contingent Worker Onboarding
  description: When a new contingent worker is approved in SAP Fieldglass, provisions their Microsoft Entra ID guest account and opens a ServiceNow onboarding task.
  tags:
  - hr
  - contingent-workforce
  - sap-fieldglass
  - microsoft-entra
  - servicenow
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: contingent-hr
    port: 8080
    tools:
    - name: onboard-contingent-worker
      description: Given a Fieldglass work order ID for an approved contingent worker, create an Entra guest account and a ServiceNow onboarding task. Use when automating external worker provisioning.
      inputParameters:
      - name: work_order_id
        in: body
        type: string
        description: The SAP Fieldglass work order ID for the approved contingent worker.
      steps:
      - name: get-work-order
        type: call
        call: fieldglass.get-work-order
        with:
          workOrderId: '{{work_order_id}}'
      - name: create-guest
        type: call
        call: entra-guest.create-guest-user
        with:
          displayName: '{{get-work-order.workerName}}'
          email: '{{get-work-order.workerEmail}}'
      - name: create-onboarding-task
        type: call
        call: servicenow-fg.create-ticket
        with:
          short_description: 'Contingent worker onboarding: {{get-work-order.workerName}}'
          category: contingent_onboarding
          assignment_group: IT_Procurement
  consumes:
  - type: http
    namespace: fieldglass
    baseUri: https://www.fieldglass.net/api/v1
    authentication:
      type: bearer
      token: $secrets.fieldglass_token
    resources:
    - name: work-orders
      path: /workorders/{{workOrderId}}
      inputParameters:
      - name: workOrderId
        in: path
      operations:
      - name: get-work-order
        method: GET
  - type: http
    namespace: entra-guest
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: guest-invitations
      path: /invitations
      operations:
      - name: create-guest-user
        method: POST
  - type: http
    namespace: servicenow-fg
    baseUri: https://sap.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/sc_task
      operations:
      - name: create-ticket
        method: POST
Open in Framework → View in Fleet → sap-fieldglass-contingent-worker-onboarding.yml

Polls SAP Ariba for sourcing events nearing deadline and creates reminder tasks in Jira for the procurement team.

naftiko: '0.5'
info:
  label: SAP Ariba Sourcing Event Monitor
  description: Polls SAP Ariba for sourcing events nearing deadline and creates reminder tasks in Jira for the procurement team.
  tags:
  - procurement
  - sourcing
  - sap-ariba
  - jira
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: sourcing-ops
    port: 8080
    tools:
    - name: monitor-sourcing-deadlines
      description: Query Ariba for open sourcing events with deadlines within a given number of days and create Jira reminder tasks for each. Use for automated procurement deadline tracking.
      inputParameters:
      - name: days_ahead
        in: body
        type: integer
        description: Number of days ahead to look for upcoming sourcing deadlines.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for creating reminder tasks.
      steps:
      - name: get-events
        type: call
        call: ariba-sourcing.get-sourcing-events
        with:
          daysAhead: '{{days_ahead}}'
      - name: create-reminders
        type: call
        call: jira-procurement.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: 'Sourcing deadline reminder: {{get-events.eventTitle}}'
          description: Ariba event {{get-events.eventId}} closes on {{get-events.deadline}}.
  consumes:
  - type: http
    namespace: ariba-sourcing
    baseUri: https://openapi.ariba.com/api/sourcing-projects/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: sourcing-events
      path: /events
      inputParameters:
      - name: daysAhead
        in: query
      operations:
      - name: get-sourcing-events
        method: GET
  - type: http
    namespace: jira-procurement
    baseUri: https://sap.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-ariba-sourcing-event-monitor.yml

Retrieves the status of a running SAP payroll process for a given payroll area and notifies HR via Microsoft Teams when complete or if errors occur.

naftiko: '0.5'
info:
  label: SAP Payroll Run Status Check
  description: Retrieves the status of a running SAP payroll process for a given payroll area and notifies HR via Microsoft Teams when complete or if errors occur.
  tags:
  - hr
  - payroll
  - sap-successfactors
  - microsoft-teams
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: payroll-monitoring
    port: 8080
    tools:
    - name: check-payroll-run-status
      description: Given a SAP payroll area and period, fetch the payroll run status from SuccessFactors EC Payroll and post the result to the HR Teams channel.
      inputParameters:
      - name: payroll_area
        in: body
        type: string
        description: SAP payroll area code, e.g. A1 for monthly US payroll.
      - name: pay_period
        in: body
        type: string
        description: Pay period in YYYYMM format, e.g. 202603.
      - name: hr_channel_id
        in: body
        type: string
        description: Teams channel ID for the HR payroll notification.
      steps:
      - name: get-payroll-status
        type: call
        call: sf-payroll.get-payroll-run
        with:
          payrollArea: '{{payroll_area}}'
          payPeriod: '{{pay_period}}'
      - name: notify-hr
        type: call
        call: msteams-payroll.send-channel-message
        with:
          channelId: '{{hr_channel_id}}'
          text: 'Payroll run for area {{payroll_area}}, period {{pay_period}}: Status={{get-payroll-status.status}}, Errors={{get-payroll-status.errorCount}}, Employees={{get-payroll-status.employeeCount}}'
  consumes:
  - type: http
    namespace: sf-payroll
    baseUri: https://api4.successfactors.com/odata/v2
    authentication:
      type: bearer
      token: $secrets.sf_token
    resources:
    - name: payroll-runs
      path: /PayrollRun
      inputParameters:
      - name: payrollArea
        in: query
      - name: payPeriod
        in: query
      operations:
      - name: get-payroll-run
        method: GET
  - type: http
    namespace: msteams-payroll
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{teamId}}/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sap-payroll-run-status-check.yml

Aggregates supplier delivery and quality metrics from SAP S/4HANA QM, calculates a performance score, and publishes a scorecard to Power BI.

naftiko: '0.5'
info:
  label: SAP Supplier Performance Scorecard
  description: Aggregates supplier delivery and quality metrics from SAP S/4HANA QM, calculates a performance score, and publishes a scorecard to Power BI.
  tags:
  - procurement
  - quality
  - sap-s4hana
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: supplier-reporting
    port: 8080
    tools:
    - name: publish-supplier-scorecard
      description: Fetch supplier quality inspection results and delivery performance from SAP S/4HANA QM module and push a computed scorecard to a Power BI dataset.
      inputParameters:
      - name: supplier_number
        in: body
        type: string
        description: SAP supplier/vendor number to score.
      - name: powerbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID for the supplier scorecard.
      steps:
      - name: get-quality-results
        type: call
        call: sap-qm.get-inspection-lots
        with:
          Vendor: '{{supplier_number}}'
      - name: push-scorecard
        type: call
        call: powerbi-supplier.push-rows
        with:
          datasetId: '{{powerbi_dataset_id}}'
          tableName: SupplierScorecard
          rows: '{{get-quality-results.value}}'
  consumes:
  - type: http
    namespace: sap-qm
    baseUri: https://sap-s4.sap.com/sap/opu/odata/sap/API_INSPECTIONLOT_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: inspection-lots
      path: /A_InspectionLot
      inputParameters:
      - name: Vendor
        in: query
      operations:
      - name: get-inspection-lots
        method: GET
  - type: http
    namespace: powerbi-supplier
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: scorecard-rows
      path: /datasets/{{datasetId}}/tables/{{tableName}}/rows
      inputParameters:
      - name: datasetId
        in: path
      - name: tableName
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → sap-supplier-performance-scorecard.yml

Exports current headcount by cost center from SAP SuccessFactors and publishes the snapshot to a Power BI dataset for finance planning.

naftiko: '0.5'
info:
  label: Headcount Planning Snapshot
  description: Exports current headcount by cost center from SAP SuccessFactors and publishes the snapshot to a Power BI dataset for finance planning.
  tags:
  - hr
  - finance
  - reporting
  - sap-successfactors
  - power-bi
capability:
  exposes:
  - type: mcp
    namespace: hr-reporting
    port: 8080
    tools:
    - name: publish-headcount-snapshot
      description: Export headcount grouped by department and cost center from SuccessFactors and push the dataset to Power BI for workforce planning dashboards.
      inputParameters:
      - name: dataset_id
        in: body
        type: string
        description: The Power BI dataset ID to push rows into.
      - name: table_name
        in: body
        type: string
        description: The table name inside the Power BI dataset, e.g. Headcount.
      steps:
      - name: get-headcount
        type: call
        call: successfactors-hc.get-headcount
      - name: push-dataset
        type: call
        call: powerbi.push-rows
        with:
          datasetId: '{{dataset_id}}'
          tableName: '{{table_name}}'
          rows: '{{get-headcount.results}}'
  consumes:
  - type: http
    namespace: successfactors-hc
    baseUri: https://api4.successfactors.com/odata/v2
    authentication:
      type: bearer
      token: $secrets.sf_token
    resources:
    - name: headcount-query
      path: /EmpJob
      operations:
      - name: get-headcount
        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
Open in Framework → View in Fleet → headcount-planning-snapshot.yml

Creates a SAP PM work order for an equipment breakdown reported via ServiceNow, assigns a technician, and notifies the maintenance team in Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Plant Maintenance Work Order Creation
  description: Creates a SAP PM work order for an equipment breakdown reported via ServiceNow, assigns a technician, and notifies the maintenance team in Microsoft Teams.
  tags:
  - manufacturing
  - itsm
  - sap-pm
  - servicenow
  - microsoft-teams
  - maintenance
capability:
  exposes:
  - type: mcp
    namespace: maintenance-ops
    port: 8080
    tools:
    - name: create-work-order-from-incident
      description: Given a ServiceNow incident ID for equipment failure, read the incident, create a SAP PM work order, and alert the maintenance team channel in Teams.
      inputParameters:
      - name: snow_incident_id
        in: body
        type: string
        description: ServiceNow incident sys_id for the equipment breakdown.
      - name: equipment_number
        in: body
        type: string
        description: SAP equipment number for the asset requiring maintenance.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the maintenance team notification.
      steps:
      - name: get-incident
        type: call
        call: servicenow-pm.get-incident
        with:
          incidentId: '{{snow_incident_id}}'
      - name: create-work-order
        type: call
        call: sap-pm.create-work-order
        with:
          equipment: '{{equipment_number}}'
          description: '{{get-incident.short_description}}'
          priority: '{{get-incident.priority}}'
      - name: notify-maintenance
        type: call
        call: msteams-maint.send-channel-message
        with:
          channelId: '{{teams_channel_id}}'
          text: 'New PM work order {{create-work-order.WorkOrder}} created for equipment {{equipment_number}}. Incident: {{snow_incident_id}}'
  consumes:
  - type: http
    namespace: servicenow-pm
    baseUri: https://sap.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident/{{incidentId}}
      inputParameters:
      - name: incidentId
        in: path
      operations:
      - name: get-incident
        method: GET
  - type: http
    namespace: sap-pm
    baseUri: https://sap-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: maintenance-orders
      path: /MaintenanceOrder
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: msteams-maint
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{teamId}}/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sap-plant-maintenance-work-order-creation.yml

Submits a scanned document to SAP Document Information Extraction (DIE), extracts structured fields, and creates a Jira task with the extracted metadata for review.

naftiko: '0.5'
info:
  label: SAP Intelligent Document Processing Intake
  description: Submits a scanned document to SAP Document Information Extraction (DIE), extracts structured fields, and creates a Jira task with the extracted metadata for review.
  tags:
  - ai
  - document-processing
  - sap-die
  - jira
  - automation
capability:
  exposes:
  - type: mcp
    namespace: doc-processing
    port: 8080
    tools:
    - name: process-document
      description: Submit a document URL to SAP Document Information Extraction for field extraction (vendor, amount, dates), then create a Jira task for human review of the extracted data.
      inputParameters:
      - name: document_url
        in: body
        type: string
        description: URL to the document to process (PDF or image).
      - name: document_type
        in: body
        type: string
        description: SAP DIE document type, e.g. invoice, purchase_order.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for the review task.
      steps:
      - name: submit-document
        type: call
        call: sap-die.submit-document
        with:
          documentUrl: '{{document_url}}'
          documentType: '{{document_type}}'
      - name: get-extraction
        type: call
        call: sap-die.get-extraction-result
        with:
          jobId: '{{submit-document.jobId}}'
      - name: create-review-task
        type: call
        call: jira-doc.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: 'Document extraction review: {{document_type}}'
          description: 'Extracted vendor: {{get-extraction.vendor}}

            Amount: {{get-extraction.amount}}

            Date: {{get-extraction.documentDate}}

            Job ID: {{submit-document.jobId}}'
  consumes:
  - type: http
    namespace: sap-die
    baseUri: https://aiservices.cfapps.sap.hana.ondemand.com/document-information-extraction/v1
    authentication:
      type: bearer
      token: $secrets.sap_die_token
    resources:
    - name: document-jobs
      path: /document/jobs
      operations:
      - name: submit-document
        method: POST
    - name: extraction-results
      path: /document/jobs/{{jobId}}
      inputParameters:
      - name: jobId
        in: path
      operations:
      - name: get-extraction-result
        method: GET
  - type: http
    namespace: jira-doc
    baseUri: https://sap.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-intelligent-document-processing-intake.yml

Monitors SAP Business Technology Platform job runs and, on failure, opens a Jira incident and posts an alert to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: SAP BTP Job Failure Alert
  description: Monitors SAP Business Technology Platform job runs and, on failure, opens a Jira incident and posts an alert to a Microsoft Teams channel.
  tags:
  - devops
  - monitoring
  - sap-btp
  - jira
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: btp-ops
    port: 8080
    tools:
    - name: handle-btp-job-failure
      description: Given a failed BTP job run ID, retrieve job details, open a Jira incident, and alert the ops channel in Microsoft Teams.
      inputParameters:
      - name: job_id
        in: body
        type: string
        description: The SAP BTP job scheduler job ID that failed.
      - name: run_id
        in: body
        type: string
        description: The specific run ID of the failed job execution.
      - name: teams_channel_id
        in: body
        type: string
        description: Microsoft Teams channel ID to post the alert to.
      steps:
      - name: get-job-run
        type: call
        call: sap-btp.get-job-run
        with:
          jobId: '{{job_id}}'
          runId: '{{run_id}}'
      - name: create-incident
        type: call
        call: jira-ops.create-issue
        with:
          project_key: OPS
          issuetype: Bug
          summary: 'BTP job failure: {{job_id}} run {{run_id}}'
          description: 'Job: {{get-job-run.jobName}}

            Status: {{get-job-run.status}}

            Error: {{get-job-run.errorMessage}}'
      - name: alert-teams
        type: call
        call: msteams-btp.send-channel-message
        with:
          channelId: '{{teams_channel_id}}'
          text: 'BTP Job Failed: {{job_id}} | Run: {{run_id}} | Jira: {{create-incident.key}}'
  consumes:
  - type: http
    namespace: sap-btp
    baseUri: https://jobscheduler.cfapps.sap.hana.ondemand.com/scheduler/jobs
    authentication:
      type: bearer
      token: $secrets.btp_token
    resources:
    - name: job-runs
      path: /{{jobId}}/runs/{{runId}}
      inputParameters:
      - name: jobId
        in: path
      - name: runId
        in: path
      operations:
      - name: get-job-run
        method: GET
  - type: http
    namespace: jira-ops
    baseUri: https://sap.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-btp
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{teamId}}/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sap-btp-job-failure-alert.yml

Reads new employee records from SAP SuccessFactors and creates corresponding user accounts in Microsoft Entra ID, then logs the sync in Jira.

naftiko: '0.5'
info:
  label: Employee Master Data Sync
  description: Reads new employee records from SAP SuccessFactors and creates corresponding user accounts in Microsoft Entra ID, then logs the sync in Jira.
  tags:
  - hr
  - identity
  - sap-successfactors
  - microsoft-entra
  - jira
  - onboarding
capability:
  exposes:
  - type: mcp
    namespace: hr-identity
    port: 8080
    tools:
    - name: sync-employee-to-entra
      description: Given a SuccessFactors employee ID, read their master data, provision an Entra ID account, and log the result in a Jira HR project.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The SuccessFactors employee ID for the new hire.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key to log the sync ticket, e.g. HR.
      steps:
      - name: get-employee
        type: call
        call: successfactors.get-employee
        with:
          employeeId: '{{employee_id}}'
      - name: create-entra-user
        type: call
        call: entra.create-user
        with:
          displayName: '{{get-employee.displayName}}'
          userPrincipalName: '{{get-employee.workEmail}}'
          department: '{{get-employee.department}}'
      - name: log-jira
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: Entra account provisioned for {{get-employee.displayName}}
          description: 'Employee ID: {{employee_id}}

            Entra UPN: {{get-employee.workEmail}}

            Entra Object ID: {{create-entra-user.id}}'
  consumes:
  - type: http
    namespace: successfactors
    baseUri: https://api4.successfactors.com/odata/v2
    authentication:
      type: bearer
      token: $secrets.sf_token
    resources:
    - name: employees
      path: /PerPerson('{{employeeId}}')
      inputParameters:
      - name: employeeId
        in: path
      operations:
      - name: get-employee
        method: GET
  - type: http
    namespace: entra
    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: jira
    baseUri: https://sap.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → employee-master-data-sync.yml

Triggers a data model refresh for a specified SAP Analytics Cloud story and posts the completion status to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: SAP Analytics Cloud Story Refresh
  description: Triggers a data model refresh for a specified SAP Analytics Cloud story and posts the completion status to a Microsoft Teams channel.
  tags:
  - analytics
  - reporting
  - sap-analytics-cloud
  - microsoft-teams
  - data-refresh
capability:
  exposes:
  - type: mcp
    namespace: analytics-ops
    port: 8080
    tools:
    - name: refresh-sac-story
      description: Trigger a data refresh for an SAP Analytics Cloud story by model ID and notify a Teams channel when complete. Use for scheduled or on-demand BI data refreshes.
      inputParameters:
      - name: model_id
        in: body
        type: string
        description: The SAP Analytics Cloud model ID to refresh.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID to notify on completion.
      steps:
      - name: trigger-refresh
        type: call
        call: sac.trigger-model-refresh
        with:
          modelId: '{{model_id}}'
      - name: notify-channel
        type: call
        call: msteams-sac.send-channel-message
        with:
          channelId: '{{teams_channel_id}}'
          text: 'SAC model {{model_id}} refresh triggered. Job ID: {{trigger-refresh.jobId}}. Status: {{trigger-refresh.status}}'
  consumes:
  - type: http
    namespace: sac
    baseUri: https://sap-analytics.cloud.sap/api/v1
    authentication:
      type: bearer
      token: $secrets.sac_token
    resources:
    - name: model-refresh
      path: /models/{{modelId}}/refresh
      inputParameters:
      - name: modelId
        in: path
      operations:
      - name: trigger-model-refresh
        method: POST
  - type: http
    namespace: msteams-sac
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{teamId}}/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sap-analytics-cloud-story-refresh.yml

Processes an employee role change in SAP SuccessFactors, updates the corresponding Salesforce user profile permissions, and logs the change in a Jira HR ticket.

naftiko: '0.5'
info:
  label: SAP SuccessFactors Role Change Workflow
  description: Processes an employee role change in SAP SuccessFactors, updates the corresponding Salesforce user profile permissions, and logs the change in a Jira HR ticket.
  tags:
  - hr
  - identity
  - sap-successfactors
  - salesforce
  - jira
  - role-change
capability:
  exposes:
  - type: mcp
    namespace: hr-role-change
    port: 8080
    tools:
    - name: process-role-change
      description: Given a SuccessFactors employee ID and new job code, update the employee's role in SuccessFactors, sync their Salesforce profile permissions, and log the change in Jira.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: SuccessFactors employee ID undergoing the role change.
      - name: new_job_code
        in: body
        type: string
        description: New job code to assign in SuccessFactors.
      - name: salesforce_user_id
        in: body
        type: string
        description: Salesforce user ID to update profile permissions.
      steps:
      - name: update-job-code
        type: call
        call: sf-emp.update-employee-job
        with:
          employeeId: '{{employee_id}}'
          jobCode: '{{new_job_code}}'
      - name: update-sf-profile
        type: call
        call: sf-crm.update-user-profile
        with:
          userId: '{{salesforce_user_id}}'
          profileId: '{{update-job-code.newProfileId}}'
      - name: log-jira
        type: call
        call: jira-hr.create-issue
        with:
          project_key: HR
          issuetype: Task
          summary: Role change processed for employee {{employee_id}}
          description: 'New job code: {{new_job_code}}

            Salesforce profile updated: {{salesforce_user_id}}'
  consumes:
  - type: http
    namespace: sf-emp
    baseUri: https://api4.successfactors.com/odata/v2
    authentication:
      type: bearer
      token: $secrets.sf_token
    resources:
    - name: employee-jobs
      path: /EmpJob(employeeId='{{employeeId}}')
      inputParameters:
      - name: employeeId
        in: path
      operations:
      - name: update-employee-job
        method: PATCH
  - type: http
    namespace: sf-crm
    baseUri: https://sap.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: user-profiles
      path: /sobjects/User/{{userId}}
      inputParameters:
      - name: userId
        in: path
      operations:
      - name: update-user-profile
        method: PATCH
  - type: http
    namespace: jira-hr
    baseUri: https://sap.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → sap-successfactors-role-change-workflow.yml

Runs a Snowflake analytical query on SAP-replicated data, formats the result, and pushes it to Power BI as a streamed dataset.

naftiko: '0.5'
info:
  label: Snowflake Query to SAP Reporting Export
  description: Runs a Snowflake analytical query on SAP-replicated data, formats the result, and pushes it to Power BI as a streamed dataset.
  tags:
  - analytics
  - data
  - snowflake
  - power-bi
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: data-reporting
    port: 8080
    tools:
    - name: run-sap-data-query
      description: Execute a named Snowflake SQL query against SAP-replicated tables and push the results to a Power BI streaming dataset for real-time reporting.
      inputParameters:
      - name: query_name
        in: body
        type: string
        description: Named query identifier in Snowflake to execute.
      - name: powerbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID to stream results to.
      steps:
      - name: run-query
        type: call
        call: snowflake.execute-query
        with:
          queryName: '{{query_name}}'
      - name: push-results
        type: call
        call: powerbi-stream.push-rows
        with:
          datasetId: '{{powerbi_dataset_id}}'
          tableName: QueryResults
          rows: '{{run-query.results}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://sap.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: powerbi-stream
    baseUri: https://api.powerbi.com/v1.0/myorg
    authentication:
      type: bearer
      token: $secrets.powerbi_token
    resources:
    - name: streaming-rows
      path: /datasets/{{datasetId}}/tables/{{tableName}}/rows
      inputParameters:
      - name: datasetId
        in: path
      - name: tableName
        in: path
      operations:
      - name: push-rows
        method: POST
Open in Framework → View in Fleet → snowflake-query-to-sap-reporting-export.yml

When Datadog fires a monitor alert for an SAP system, creates a ServiceNow incident and posts an alert to Microsoft Teams.

naftiko: '0.5'
info:
  label: Datadog Alert to SAP Incident
  description: When Datadog fires a monitor alert for an SAP system, creates a ServiceNow incident and posts an alert to Microsoft Teams.
  tags:
  - itsm
  - monitoring
  - datadog
  - servicenow
  - microsoft-teams
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: sap-incident-ops
    port: 8080
    tools:
    - name: handle-datadog-sap-alert
      description: Given a Datadog monitor ID and alert event, retrieve alert details, create a P1 ServiceNow incident, and post an ops alert to Teams.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID that fired.
      - name: alert_message
        in: body
        type: string
        description: Short alert message describing the SAP system issue.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID for the ops alert.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitor_id: '{{monitor_id}}'
      - name: create-incident
        type: call
        call: servicenow-incident.create-incident
        with:
          short_description: 'SAP Alert: {{alert_message}}'
          urgency: '1'
          impact: '1'
          description: 'Datadog monitor {{monitor_id}} ({{get-monitor.name}}) fired. Query: {{get-monitor.query}}'
      - name: alert-teams
        type: call
        call: msteams-ops.send-channel-message
        with:
          channelId: '{{teams_channel_id}}'
          text: 'SAP Alert: {{alert_message}} | Monitor: {{get-monitor.name}} | 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-incident
    baseUri: https://sap.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-ops
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{teamId}}/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → datadog-alert-to-sap-incident.yml

Retrieves general ledger account balances for a given company code and fiscal period from SAP S/4HANA for finance period-close review.

naftiko: '0.5'
info:
  label: SAP S/4HANA GL Account Balance Lookup
  description: Retrieves general ledger account balances for a given company code and fiscal period from SAP S/4HANA for finance period-close review.
  tags:
  - finance
  - erp
  - sap-s4hana
  - period-close
capability:
  exposes:
  - type: mcp
    namespace: finance-gl
    port: 8080
    tools:
    - name: get-gl-balance
      description: Given a company code, GL account, and fiscal year/period, return the debit balance, credit balance, and net balance from SAP S/4HANA.
      inputParameters:
      - name: company_code
        in: body
        type: string
        description: SAP company code, e.g. 1000.
      - name: gl_account
        in: body
        type: string
        description: General ledger account number.
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year, e.g. 2026.
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period number, e.g. 03 for March.
      call: sap-gl.get-gl-balance
      with:
        CompanyCode: '{{company_code}}'
        GLAccount: '{{gl_account}}'
        FiscalYear: '{{fiscal_year}}'
        FiscalPeriod: '{{fiscal_period}}'
      outputParameters:
      - name: debit_balance
        type: string
        mapping: $.d.DebitAmountInCoCodeCrcy
      - name: credit_balance
        type: string
        mapping: $.d.CreditAmountInCoCodeCrcy
      - name: currency
        type: string
        mapping: $.d.CompanyCodeCurrency
  consumes:
  - type: http
    namespace: sap-gl
    baseUri: https://sap-s4.sap.com/sap/opu/odata/sap/API_GL_ACCOUNT_LINE_ITEMS_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: gl-balances
      path: /A_GLAccountBalance
      inputParameters:
      - name: CompanyCode
        in: query
      - name: GLAccount
        in: query
      - name: FiscalYear
        in: query
      - name: FiscalPeriod
        in: query
      operations:
      - name: get-gl-balance
        method: GET
Open in Framework → View in Fleet → sap-s-4hana-gl-account-balance-lookup.yml

Exports SAP S/4HANA audit log entries for a given date range to a Snowflake compliance table and notifies the security team via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Audit Log Compliance Export
  description: Exports SAP S/4HANA audit log entries for a given date range to a Snowflake compliance table and notifies the security team via Microsoft Teams.
  tags:
  - security
  - compliance
  - sap-s4hana
  - snowflake
  - microsoft-teams
  - audit
capability:
  exposes:
  - type: mcp
    namespace: compliance-ops
    port: 8080
    tools:
    - name: export-audit-logs
      description: Export SAP S/4HANA audit log entries for a date range, insert them into a Snowflake compliance table, and notify the security team in Teams.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date for audit log export in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date for audit log export in YYYY-MM-DD format.
      - name: snowflake_table
        in: body
        type: string
        description: Fully qualified Snowflake table name to insert audit records.
      - name: teams_channel_id
        in: body
        type: string
        description: Teams channel ID to notify on export completion.
      steps:
      - name: get-audit-logs
        type: call
        call: sap-audit.get-audit-logs
        with:
          startDate: '{{start_date}}'
          endDate: '{{end_date}}'
      - name: insert-snowflake
        type: call
        call: snowflake-compliance.insert-rows
        with:
          tableName: '{{snowflake_table}}'
          rows: '{{get-audit-logs.entries}}'
      - name: notify-security
        type: call
        call: msteams-audit.send-channel-message
        with:
          channelId: '{{teams_channel_id}}'
          text: 'SAP audit log export complete. Records: {{get-audit-logs.count}}. Snowflake table: {{snowflake_table}}. Period: {{start_date}} to {{end_date}}'
  consumes:
  - type: http
    namespace: sap-audit
    baseUri: https://sap-s4.sap.com/sap/opu/odata/sap/AUDITLOG_SRV
    authentication:
      type: basic
      username: $secrets.sap_user
      password: $secrets.sap_password
    resources:
    - name: audit-logs
      path: /AuditLogEntries
      inputParameters:
      - name: startDate
        in: query
      - name: endDate
        in: query
      operations:
      - name: get-audit-logs
        method: GET
  - type: http
    namespace: snowflake-compliance
    baseUri: https://sap.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: table-rows
      path: /statements
      operations:
      - name: insert-rows
        method: POST
  - type: http
    namespace: msteams-audit
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: channel-messages
      path: /teams/{{teamId}}/channels/{{channelId}}/messages
      inputParameters:
      - name: channelId
        in: path
      operations:
      - name: send-channel-message
        method: POST
Open in Framework → View in Fleet → sap-audit-log-compliance-export.yml

Retrieves a pending travel request from SAP Concur, applies the policy check result, and notifies the traveler of the approval decision via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Concur Travel Booking Approval
  description: Retrieves a pending travel request from SAP Concur, applies the policy check result, and notifies the traveler of the approval decision via Microsoft Teams.
  tags:
  - finance
  - travel
  - sap-concur
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: travel-ops
    port: 8080
    tools:
    - name: approve-travel-request
      description: Given a Concur travel request ID and approval decision, post the decision to Concur and notify the traveler in Teams. Use for automating travel approval workflows.
      inputParameters:
      - name: request_id
        in: body
        type: string
        description: SAP Concur travel request ID.
      - name: decision
        in: body
        type: string
        description: 'Approval decision: ''approve'' or ''reject''.'
      - name: traveler_upn
        in: body
        type: string
        description: UPN of the traveler to notify.
      steps:
      - name: get-request
        type: call
        call: concur-travel.get-travel-request
        with:
          requestId: '{{request_id}}'
      - name: post-decision
        type: call
        call: concur-travel.approve-travel-request
        with:
          requestId: '{{request_id}}'
          decision: '{{decision}}'
      - name: notify-traveler
        type: call
        call: msteams-travel.send-message
        with:
          recipient_upn: '{{traveler_upn}}'
          text: 'Your travel request {{request_id}} ({{get-request.name}}) has been {{decision}}d. Estimated cost: {{get-request.totalApprovedAmount}}'
  consumes:
  - type: http
    namespace: concur-travel
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: travel-requests
      path: /travelrequest/requests/{{requestId}}
      inputParameters:
      - name: requestId
        in: path
      operations:
      - name: get-travel-request
        method: GET
      - name: approve-travel-request
        method: POST
  - type: http
    namespace: msteams-travel
    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-concur-travel-booking-approval.yml

When an employee termination is recorded in SAP SuccessFactors, deactivates their Okta account and revokes all active Okta sessions.

naftiko: '0.5'
info:
  label: Okta User Deprovisioning on SAP Termination
  description: When an employee termination is recorded in SAP SuccessFactors, deactivates their Okta account and revokes all active Okta sessions.
  tags:
  - hr
  - identity
  - security
  - sap-successfactors
  - okta
  - offboarding
capability:
  exposes:
  - type: mcp
    namespace: offboarding-ops
    port: 8080
    tools:
    - name: deprovision-terminated-employee
      description: Given a SuccessFactors employee ID and their Okta user ID, confirm the termination in SuccessFactors, deactivate the Okta user, and clear all active sessions.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: SuccessFactors employee ID for the terminated employee.
      - name: okta_user_id
        in: body
        type: string
        description: Okta user ID to deactivate.
      steps:
      - name: verify-termination
        type: call
        call: sf-termination.get-employee-status
        with:
          employeeId: '{{employee_id}}'
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          userId: '{{okta_user_id}}'
      - name: clear-sessions
        type: call
        call: okta-sessions.clear-user-sessions
        with:
          userId: '{{okta_user_id}}'
  consumes:
  - type: http
    namespace: sf-termination
    baseUri: https://api4.successfactors.com/odata/v2
    authentication:
      type: bearer
      token: $secrets.sf_token
    resources:
    - name: employee-status
      path: /EmpEmployment(personIdExternal='{{employeeId}}')
      inputParameters:
      - name: employeeId
        in: path
      operations:
      - name: get-employee-status
        method: GET
  - type: http
    namespace: okta
    baseUri: https://sap.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: users
      path: /users/{{userId}}/lifecycle/deactivate
      inputParameters:
      - name: userId
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: okta-sessions
    baseUri: https://sap.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: user-sessions
      path: /users/{{userId}}/sessions
      inputParameters:
      - name: userId
        in: path
      operations:
      - name: clear-user-sessions
        method: DELETE
Open in Framework → View in Fleet → okta-user-deprovisioning-on-sap-termination.yml

Queries SAP Ariba for contracts expiring within a configurable window and sends expiry alerts to contract owners via Microsoft Teams.

naftiko: '0.5'
info:
  label: SAP Ariba Contract Expiry Notification
  description: Queries SAP Ariba for contracts expiring within a configurable window and sends expiry alerts to contract owners via Microsoft Teams.
  tags:
  - procurement
  - contract-management
  - sap-ariba
  - microsoft-teams
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: contract-ops
    port: 8080
    tools:
    - name: notify-expiring-contracts
      description: Query Ariba Contracts for agreements expiring within a given number of days and send a Teams notification to each contract owner. Use for automated contract renewal management.
      inputParameters:
      - name: days_to_expiry
        in: body
        type: integer
        description: Number of days ahead to check for expiring contracts.
      steps:
      - name: get-contracts
        type: call
        call: ariba-contracts.get-expiring-contracts
        with:
          daysToExpiry: '{{days_to_expiry}}'
      - name: notify-owner
        type: call
        call: msteams-contracts.send-message
        with:
          recipient_upn: '{{get-contracts.ownerEmail}}'
          text: Contract {{get-contracts.contractId}} ({{get-contracts.supplierName}}) expires on {{get-contracts.expiryDate}}. Please initiate renewal.
  consumes:
  - type: http
    namespace: ariba-contracts
    baseUri: https://openapi.ariba.com/api/contract-management/v1
    authentication:
      type: bearer
      token: $secrets.ariba_token
    resources:
    - name: contracts
      path: /contracts
      inputParameters:
      - name: daysToExpiry
        in: query
      operations:
      - name: get-expiring-contracts
        method: GET
  - type: http
    namespace: msteams-contracts
    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-contract-expiry-notification.yml

Retrieves a generic task record by number, returning state, assigned to, and due date.

naftiko: '0.5'
info:
  label: ServiceNow Task Record Lookup
  description: Retrieves a generic task record by number, returning state, assigned to, and due date.
  tags:
  - itsm
  - task-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-task
    port: 8080
    tools:
    - name: get-task
      description: Given a task number, return the task state, assigned user, priority, and due date.
      inputParameters:
      - name: task_number
        in: body
        type: string
        description: ServiceNow task number.
      call: servicenow.get-task
      with:
        number: '{{task_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result[0].state.display_value
      - name: assigned_to
        type: string
        mapping: $.result[0].assigned_to.display_value
      - name: priority
        type: string
        mapping: $.result[0].priority.display_value
      - name: due_date
        type: string
        mapping: $.result[0].due_date
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: tasks
      path: /table/task
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-task
        method: GET
Open in Framework → View in Fleet → servicenow-task-record-lookup.yml

When a high-priority Salesforce Service Cloud case is escalated, creates a matching ServiceNow incident and assigns it to the ITSM team, keeping both records linked.

naftiko: '0.5'
info:
  label: Salesforce Case to ServiceNow Incident Bridge
  description: When a high-priority Salesforce Service Cloud case is escalated, creates a matching ServiceNow incident and assigns it to the ITSM team, keeping both records linked.
  tags:
  - itsm
  - crm
  - customer-support
  - salesforce
  - servicenow
  - escalation
capability:
  exposes:
  - type: mcp
    namespace: case-bridge
    port: 8080
    tools:
    - name: escalate-case-to-incident
      description: Given a Salesforce case ID, fetch the case details, create a ServiceNow incident, and update the Salesforce case with the incident number for cross-system tracking.
      inputParameters:
      - name: salesforce_case_id
        in: body
        type: string
        description: Salesforce Service Cloud case ID to escalate.
      steps:
      - name: get-case
        type: call
        call: salesforce.get-case
        with:
          caseId: '{{salesforce_case_id}}'
      - name: create-incident
        type: call
        call: snow-case.create-incident
        with:
          short_description: 'Escalated from Salesforce Case: {{get-case.CaseNumber}} — {{get-case.Subject}}'
          urgency: '1'
          description: 'Customer: {{get-case.Account.Name}}

            Description: {{get-case.Description}}

            Salesforce Case: {{salesforce_case_id}}'
      - name: update-case
        type: call
        call: salesforce-update.update-case
        with:
          caseId: '{{salesforce_case_id}}'
          snowIncidentNumber: '{{create-incident.number}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://servicenow.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: cases
      path: /sobjects/Case/{{caseId}}
      inputParameters:
      - name: caseId
        in: path
      operations:
      - name: get-case
        method: GET
  - type: http
    namespace: snow-case
    baseUri: https://servicenow.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: salesforce-update
    baseUri: https://servicenow.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: case-updates
      path: /sobjects/Case/{{caseId}}
      inputParameters:
      - name: caseId
        in: path
      operations:
      - name: update-case
        method: PATCH
Open in Framework → View in Fleet → salesforce-case-to-servicenow-incident-bridge.yml

Queries AWS for untagged resources, creates a ServiceNow compliance incident, and notifies the cloud governance team via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Cloud Resource Tagging Compliance
  description: Queries AWS for untagged resources, creates a ServiceNow compliance incident, and notifies the cloud governance team via Slack.
  tags:
  - itsm
  - cloud-governance
  - servicenow
  - aws
  - slack
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: tag-compliance
    port: 8080
    tools:
    - name: check-tagging-compliance
      description: Scan AWS for untagged resources, create a ServiceNow compliance incident, and alert the governance team.
      inputParameters:
      - name: aws_region
        in: body
        type: string
        description: AWS region to scan.
      steps:
      - name: scan-untagged
        type: call
        call: aws.get-untagged-resources
        with:
          region: '{{aws_region}}'
      - name: create-compliance-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Tagging compliance: {{scan-untagged.count}} untagged resources in {{aws_region}}'
          category: compliance
          assignment_group: cloud-governance
      - name: notify-governance
        type: call
        call: slack.post-message
        with:
          channel: cloud-governance
          text: 'Tagging Compliance Alert: {{scan-untagged.count}} untagged resources in {{aws_region}}. Incident: {{create-compliance-incident.number}}'
  consumes:
  - type: http
    namespace: aws
    baseUri: https://resourcegroupstaggingapi.{{region}}.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_auth_header
      placement: header
    resources:
    - name: resources
      path: /GetResources
      inputParameters:
      - name: region
        in: path
      operations:
      - name: get-untagged-resources
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-cloud-resource-tagging-compliance.yml

When a ServiceNow problem is resolved, generates a structured post-mortem document using Anthropic Claude and saves it to Confluence.

naftiko: '0.5'
info:
  label: ServiceNow Problem Post-Mortem Generator
  description: When a ServiceNow problem is resolved, generates a structured post-mortem document using Anthropic Claude and saves it to Confluence.
  tags:
  - itsm
  - ai
  - servicenow
  - anthropic
  - confluence
  - post-mortem
capability:
  exposes:
  - type: mcp
    namespace: postmortem-ops
    port: 8080
    tools:
    - name: generate-post-mortem
      description: Given a resolved ServiceNow problem record number, extract the timeline and resolution data, generate a structured post-mortem using Anthropic Claude, and save the document to Confluence.
      inputParameters:
      - name: problem_number
        in: body
        type: string
        description: ServiceNow problem record number, e.g. PRB0000123.
      - name: confluence_space_key
        in: body
        type: string
        description: Confluence space key to publish the post-mortem page.
      - name: confluence_parent_page_id
        in: body
        type: string
        description: Confluence parent page ID under which to create the post-mortem.
      steps:
      - name: get-problem
        type: call
        call: snow-postmortem.get-problem
        with:
          number: '{{problem_number}}'
      - name: generate-doc
        type: call
        call: anthropic-pm.generate-postmortem
        with:
          title: '{{get-problem.short_description}}'
          timeline: '{{get-problem.work_notes}}'
          rootCause: '{{get-problem.cause_notes}}'
          resolution: '{{get-problem.fix_notes}}'
      - name: save-confluence
        type: call
        call: confluence-pm.create-page
        with:
          spaceKey: '{{confluence_space_key}}'
          parentId: '{{confluence_parent_page_id}}'
          title: 'Post-Mortem: {{get-problem.short_description}}'
          content: '{{generate-doc.markdown}}'
  consumes:
  - type: http
    namespace: snow-postmortem
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: problems
      path: /table/problem
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-problem
        method: GET
  - type: http
    namespace: anthropic-pm
    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: generate-postmortem
        method: POST
  - type: http
    namespace: confluence-pm
    baseUri: https://servicenow.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content
      operations:
      - name: create-page
        method: POST
Open in Framework → View in Fleet → servicenow-problem-post-mortem-generator.yml

When a Zoom meeting recording is processed, fetches the transcript, summarizes it with Anthropic Claude, and creates a ServiceNow knowledge article.

naftiko: '0.5'
info:
  label: Zoom Meeting Recording to ServiceNow Knowledge
  description: When a Zoom meeting recording is processed, fetches the transcript, summarizes it with Anthropic Claude, and creates a ServiceNow knowledge article.
  tags:
  - knowledge-management
  - ai
  - zoom
  - servicenow
  - anthropic
capability:
  exposes:
  - type: mcp
    namespace: meeting-knowledge
    port: 8080
    tools:
    - name: capture-meeting-knowledge
      description: Given a Zoom meeting ID, download the recording transcript, generate a structured meeting summary with Anthropic Claude, and publish it as a ServiceNow knowledge article.
      inputParameters:
      - name: zoom_meeting_id
        in: body
        type: string
        description: Zoom meeting ID with an available recording transcript.
      - name: snow_kb_category
        in: body
        type: string
        description: ServiceNow knowledge base category sys_id for the article.
      steps:
      - name: get-recording
        type: call
        call: zoom-rec.get-recording
        with:
          meetingId: '{{zoom_meeting_id}}'
      - name: summarize-transcript
        type: call
        call: anthropic-zoom.summarize-transcript
        with:
          transcript: '{{get-recording.transcript}}'
          meetingTopic: '{{get-recording.topic}}'
      - name: create-kb-article
        type: call
        call: snow-zoom.create-article
        with:
          short_description: 'Meeting Summary: {{get-recording.topic}}'
          text: '{{summarize-transcript.summary}}'
          kb_category: '{{snow_kb_category}}'
          workflow_state: review
  consumes:
  - type: http
    namespace: zoom-rec
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_token
    resources:
    - name: recordings
      path: /meetings/{{meetingId}}/recordings
      inputParameters:
      - name: meetingId
        in: path
      operations:
      - name: get-recording
        method: GET
  - type: http
    namespace: anthropic-zoom
    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: summarize-transcript
        method: POST
  - type: http
    namespace: snow-zoom
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: knowledge-articles
      path: /table/kb_knowledge
      operations:
      - name: create-article
        method: POST
Open in Framework → View in Fleet → zoom-meeting-recording-to-servicenow-knowledge.yml

Retrieves cost center details by name or code, returning manager, department, and budget allocation.

naftiko: '0.5'
info:
  label: ServiceNow Cost Center Lookup
  description: Retrieves cost center details by name or code, returning manager, department, and budget allocation.
  tags:
  - itsm
  - financial-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-costcenter
    port: 8080
    tools:
    - name: get-cost-center
      description: Given a cost center name, return its code, manager, department, and parent cost center.
      inputParameters:
      - name: cost_center_name
        in: body
        type: string
        description: Cost center name.
      call: servicenow.get-cost-center
      with:
        name: '{{cost_center_name}}'
      outputParameters:
      - name: code
        type: string
        mapping: $.result[0].account_number
      - name: manager
        type: string
        mapping: $.result[0].manager.display_value
      - name: parent
        type: string
        mapping: $.result[0].parent.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: cost-centers
      path: /table/cmn_cost_center
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-cost-center
        method: GET
Open in Framework → View in Fleet → servicenow-cost-center-lookup.yml

Coordinates a release by creating a release record, linking associated change requests, and notifying stakeholders via Slack and Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Release Management Orchestrator
  description: Coordinates a release by creating a release record, linking associated change requests, and notifying stakeholders via Slack and Microsoft Teams.
  tags:
  - itsm
  - release-management
  - servicenow
  - slack
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: release-mgmt
    port: 8080
    tools:
    - name: orchestrate-release
      description: Given a release name and linked change numbers, create the release record, associate changes, and broadcast to stakeholders.
      inputParameters:
      - name: release_name
        in: body
        type: string
        description: Name of the release.
      - name: change_numbers
        in: body
        type: string
        description: Comma-separated list of change request numbers.
      - name: release_date
        in: body
        type: string
        description: Planned release date.
      steps:
      - name: create-release
        type: call
        call: servicenow.create-release
        with:
          short_description: '{{release_name}}'
          planned_start_date: '{{release_date}}'
          description: 'Changes included: {{change_numbers}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: release-management
          text: 'Release planned: {{release_name}} on {{release_date}} | Changes: {{change_numbers}} | Tracking: {{create-release.number}}'
      - name: notify-teams
        type: call
        call: teams.post-message
        with:
          channel_id: $secrets.teams_release_channel_id
          text: 'Release {{create-release.number}}: {{release_name}} scheduled for {{release_date}}. Changes: {{change_numbers}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: releases
      path: /table/rm_release
      operations:
      - name: create-release
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: channel-messages
      path: /teams/$secrets.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-release-management-orchestrator.yml

Creates an emergency change request, auto-approves it, triggers PagerDuty for on-call engineer, and notifies the CAB retrospectively.

naftiko: '0.5'
info:
  label: ServiceNow Emergency Change Fast Track
  description: Creates an emergency change request, auto-approves it, triggers PagerDuty for on-call engineer, and notifies the CAB retrospectively.
  tags:
  - itsm
  - change-management
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: emergency-change
    port: 8080
    tools:
    - name: create-emergency-change
      description: Given an emergency description, create and auto-approve a change, page the on-call engineer, and notify the CAB.
      inputParameters:
      - name: description
        in: body
        type: string
        description: Description of the emergency change.
      - name: affected_service
        in: body
        type: string
        description: Name of the affected service.
      steps:
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'EMERGENCY: {{description}}'
          type: emergency
          risk: high
          cmdb_ci: '{{affected_service}}'
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Emergency change: {{description}}'
          service_id: $secrets.pagerduty_service_id
          urgency: high
      - name: notify-cab
        type: call
        call: slack.post-message
        with:
          channel: cab-retrospective
          text: 'Emergency change {{create-change.number}} created and fast-tracked. Service: {{affected_service}} | PD: {{page-oncall.incident_url}} | Retrospective review required.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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: 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
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-emergency-change-fast-track.yml

Runs a ServiceNow Discovery scan, compares the results to the existing CMDB, and creates Jira tasks for unreconciled assets requiring review.

naftiko: '0.5'
info:
  label: ServiceNow Asset Discovery Reconciliation
  description: Runs a ServiceNow Discovery scan, compares the results to the existing CMDB, and creates Jira tasks for unreconciled assets requiring review.
  tags:
  - itsm
  - cmdb
  - servicenow
  - jira
  - asset-management
  - discovery
capability:
  exposes:
  - type: mcp
    namespace: discovery-ops
    port: 8080
    tools:
    - name: reconcile-discovery-results
      description: Trigger a ServiceNow Discovery schedule, retrieve unreconciled CIs from the results, and create Jira tasks for each CI requiring manual review.
      inputParameters:
      - name: discovery_schedule_id
        in: body
        type: string
        description: ServiceNow Discovery schedule sys_id to run.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key to create reconciliation tasks in.
      steps:
      - name: trigger-discovery
        type: call
        call: snow-discovery.run-schedule
        with:
          scheduleId: '{{discovery_schedule_id}}'
      - name: get-unreconciled
        type: call
        call: snow-discovery.get-unreconciled-cis
        with:
          runId: '{{trigger-discovery.runId}}'
      - name: create-reconcile-tasks
        type: call
        call: jira-discovery.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: 'CMDB reconciliation needed: {{get-unreconciled.ciName}}'
          description: 'Unreconciled CI: {{get-unreconciled.ipAddress}} | Class: {{get-unreconciled.class}} | Discovery run: {{trigger-discovery.runId}}'
  consumes:
  - type: http
    namespace: snow-discovery
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: discovery-schedules
      path: /table/discovery_schedule/{{scheduleId}}/run
      inputParameters:
      - name: scheduleId
        in: path
      operations:
      - name: run-schedule
        method: POST
    - name: unreconciled-cis
      path: /table/cmdb_ci
      inputParameters:
      - name: runId
        in: query
      operations:
      - name: get-unreconciled-cis
        method: GET
  - type: http
    namespace: jira-discovery
    baseUri: https://servicenow.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → servicenow-asset-discovery-reconciliation.yml

Retrieves a ServiceNow incident by number, evaluates priority against SLA thresholds, and escalates to PagerDuty with a Slack alert if the SLA is at risk.

naftiko: '0.5'
info:
  label: Incident Triage and Escalation
  description: Retrieves a ServiceNow incident by number, evaluates priority against SLA thresholds, and escalates to PagerDuty with a Slack alert if the SLA is at risk.
  tags:
  - itsm
  - incident-response
  - servicenow
  - pagerduty
  - slack
  - sla
capability:
  exposes:
  - type: mcp
    namespace: incident-ops
    port: 8080
    tools:
    - name: triage-incident
      description: Given a ServiceNow incident number, check its priority and SLA remaining time, trigger a PagerDuty alert if critical, and post an escalation notice to Slack.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number, e.g. INC0012345.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel name or ID to post the escalation notice.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: trigger-pagerduty
        type: call
        call: pagerduty.create-incident
        with:
          title: 'SLA at risk: {{get-incident.short_description}}'
          severity: critical
          serviceId: $secrets.pagerduty_service_id
          details: 'Incident: {{incident_number}} | Priority: {{get-incident.priority}} | Assigned to: {{get-incident.assigned_to}}'
      - name: post-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Escalation: {{incident_number}} — {{get-incident.short_description}} | PagerDuty ID: {{trigger-pagerduty.id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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: 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
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → incident-triage-and-escalation.yml

Exports current active employee headcount from Workday and pushes the structured data to a ServiceNow HR module table for workforce visibility.

naftiko: '0.5'
info:
  label: ServiceNow Workforce Headcount Sync
  description: Exports current active employee headcount from Workday and pushes the structured data to a ServiceNow HR module table for workforce visibility.
  tags:
  - hr
  - reporting
  - workday
  - servicenow
  - workforce-planning
capability:
  exposes:
  - type: mcp
    namespace: workforce-sync
    port: 8080
    tools:
    - name: sync-headcount-to-snow
      description: Export active worker records from Workday and upsert them into the ServiceNow HR employee table for cross-platform headcount visibility.
      inputParameters:
      - name: workday_org_id
        in: body
        type: string
        description: Workday organization ID to export headcount for.
      steps:
      - name: get-workers
        type: call
        call: workday-wf.get-workers
        with:
          orgId: '{{workday_org_id}}'
      - name: upsert-snow-hr
        type: call
        call: snow-hr.upsert-employee
        with:
          employees: '{{get-workers.workers}}'
  consumes:
  - type: http
    namespace: workday-wf
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers
      inputParameters:
      - name: orgId
        in: query
      operations:
      - name: get-workers
        method: GET
  - type: http
    namespace: snow-hr
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: hr-employees
      path: /table/sn_hr_core_employee
      operations:
      - name: upsert-employee
        method: POST
Open in Framework → View in Fleet → servicenow-workforce-headcount-sync.yml

Processes a mobile device enrollment request, registers the device in Microsoft Intune, updates the ServiceNow CMDB, and notifies the user.

naftiko: '0.5'
info:
  label: ServiceNow Mobile Device Enrollment Workflow
  description: Processes a mobile device enrollment request, registers the device in Microsoft Intune, updates the ServiceNow CMDB, and notifies the user.
  tags:
  - itsm
  - device-management
  - servicenow
  - microsoft-intune
  - slack
capability:
  exposes:
  - type: mcp
    namespace: mdm-enroll
    port: 8080
    tools:
    - name: enroll-mobile-device
      description: Given a request item number, register the device in Intune, create a CMDB record, and notify the user.
      inputParameters:
      - name: ritm_number
        in: body
        type: string
        description: ServiceNow request item number.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-ritm
        with:
          number: '{{ritm_number}}'
      - name: register-device
        type: call
        call: intune.register-device
        with:
          device_name: '{{get-request.device_name}}'
          user_principal: '{{get-request.requested_for_email}}'
      - name: create-cmdb-ci
        type: call
        call: servicenow.create-ci
        with:
          name: '{{get-request.device_name}}'
          sys_class_name: cmdb_ci_mobile_device
          assigned_to: '{{get-request.requested_for}}'
      - name: notify-user
        type: call
        call: slack.post-message
        with:
          channel: '{{get-request.requested_for_slack_id}}'
          text: Your mobile device {{get-request.device_name}} has been enrolled. Request {{ritm_number}} complete.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: request-items
      path: /table/sc_req_item
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-ritm
        method: GET
    - name: cmdb-items
      path: /table/cmdb_ci
      operations:
      - name: create-ci
        method: POST
  - type: http
    namespace: intune
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.intune_token
    resources:
    - name: devices
      path: /deviceManagement/managedDevices
      operations:
      - name: register-device
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-mobile-device-enrollment-workflow.yml

Processes a ServiceNow service catalog request, provisions the requested cloud resource via Terraform Cloud, and updates the request item with the provisioning result.

naftiko: '0.5'
info:
  label: Service Catalog Request Fulfillment
  description: Processes a ServiceNow service catalog request, provisions the requested cloud resource via Terraform Cloud, and updates the request item with the provisioning result.
  tags:
  - itsm
  - service-catalog
  - servicenow
  - terraform
  - cloud
  - provisioning
capability:
  exposes:
  - type: mcp
    namespace: catalog-fulfillment
    port: 8080
    tools:
    - name: fulfill-catalog-request
      description: Given a ServiceNow catalog request item sys_id, read the request, trigger a Terraform Cloud workspace run to provision the resource, and update the RITM with the result.
      inputParameters:
      - name: ritm_sys_id
        in: body
        type: string
        description: ServiceNow RITM (request item) sys_id to fulfill.
      - name: terraform_workspace_id
        in: body
        type: string
        description: Terraform Cloud workspace ID to run.
      steps:
      - name: get-ritm
        type: call
        call: snow-catalog.get-ritm
        with:
          sysId: '{{ritm_sys_id}}'
      - name: run-terraform
        type: call
        call: terraform.create-run
        with:
          workspaceId: '{{terraform_workspace_id}}'
          message: 'Provisioning for RITM {{get-ritm.number}}: {{get-ritm.short_description}}'
      - name: update-ritm
        type: call
        call: snow-catalog.update-ritm
        with:
          sysId: '{{ritm_sys_id}}'
          workNotes: 'Terraform run started. Run ID: {{run-terraform.runId}}. Status: {{run-terraform.status}}'
  consumes:
  - type: http
    namespace: snow-catalog
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: request-items
      path: /table/sc_req_item/{{sysId}}
      inputParameters:
      - name: sysId
        in: path
      operations:
      - name: get-ritm
        method: GET
      - name: update-ritm
        method: PATCH
  - 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
Open in Framework → View in Fleet → service-catalog-request-fulfillment.yml

When Datadog detects an anomaly monitor trigger, creates a ServiceNow problem record with RCA details and notifies the on-call team via PagerDuty.

naftiko: '0.5'
info:
  label: Datadog Anomaly to ServiceNow Problem
  description: When Datadog detects an anomaly monitor trigger, creates a ServiceNow problem record with RCA details and notifies the on-call team via PagerDuty.
  tags:
  - itsm
  - monitoring
  - datadog
  - servicenow
  - pagerduty
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: observability-ops
    port: 8080
    tools:
    - name: handle-datadog-anomaly
      description: Given a Datadog monitor ID and anomaly event, fetch the monitor details, create a ServiceNow problem record, and page the on-call team via PagerDuty.
      inputParameters:
      - name: monitor_id
        in: body
        type: string
        description: Datadog monitor ID that fired the anomaly.
      - name: event_message
        in: body
        type: string
        description: Anomaly event message from Datadog.
      - name: pagerduty_service_id
        in: body
        type: string
        description: PagerDuty service ID for the on-call escalation.
      steps:
      - name: get-monitor
        type: call
        call: datadog.get-monitor
        with:
          monitorId: '{{monitor_id}}'
      - name: create-problem
        type: call
        call: snow-problem.create-problem
        with:
          short_description: 'Anomaly detected: {{get-monitor.name}}'
          description: 'Monitor: {{monitor_id}}

            Query: {{get-monitor.query}}

            Event: {{event_message}}'
          category: availability
      - name: page-oncall
        type: call
        call: pagerduty-ops.create-incident
        with:
          title: 'Datadog anomaly: {{get-monitor.name}}'
          severity: high
          serviceId: '{{pagerduty_service_id}}'
          details: 'ServiceNow problem: {{create-problem.number}} | Monitor ID: {{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/{{monitorId}}
      inputParameters:
      - name: monitorId
        in: path
      operations:
      - name: get-monitor
        method: GET
  - type: http
    namespace: snow-problem
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: problems
      path: /table/problem
      operations:
      - name: create-problem
        method: POST
  - type: http
    namespace: pagerduty-ops
    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-anomaly-to-servicenow-problem.yml

Queries Azure cost management for spending anomalies, creates a ServiceNow request for financial review, and posts the anomaly details to a Slack channel.

naftiko: '0.5'
info:
  label: Azure Cloud Cost Anomaly to ServiceNow
  description: Queries Azure cost management for spending anomalies, creates a ServiceNow request for financial review, and posts the anomaly details to a Slack channel.
  tags:
  - cloud
  - cost-management
  - azure
  - servicenow
  - slack
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost-ops
    port: 8080
    tools:
    - name: handle-azure-cost-anomaly
      description: Given an Azure subscription ID, query Azure cost management for anomalies, create a ServiceNow financial review request, and notify the cloud cost Slack channel.
      inputParameters:
      - name: subscription_id
        in: body
        type: string
        description: Azure subscription ID to check for cost anomalies.
      - name: budget_threshold_usd
        in: body
        type: number
        description: Cost threshold in USD above which to flag an anomaly.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to notify of the cost anomaly.
      steps:
      - name: get-cost-data
        type: call
        call: azure-cost.get-cost-summary
        with:
          subscriptionId: '{{subscription_id}}'
      - name: create-review-request
        type: call
        call: snow-cost.create-request
        with:
          short_description: 'Azure cost anomaly: subscription {{subscription_id}}'
          description: 'Current spend: {{get-cost-data.totalCost}} USD

            Threshold: {{budget_threshold_usd}} USD

            Period: {{get-cost-data.billingPeriod}}'
          category: cloud_cost_review
      - name: notify-cost-team
        type: call
        call: slack-cost.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Azure cost anomaly on subscription {{subscription_id}}: ${{get-cost-data.totalCost}} vs threshold ${{budget_threshold_usd}} | Request: {{create-review-request.number}}'
  consumes:
  - type: http
    namespace: azure-cost
    baseUri: https://management.azure.com
    authentication:
      type: bearer
      token: $secrets.azure_mgmt_token
    resources:
    - name: cost-summary
      path: /subscriptions/{{subscriptionId}}/providers/Microsoft.CostManagement/query
      inputParameters:
      - name: subscriptionId
        in: path
      operations:
      - name: get-cost-summary
        method: POST
  - type: http
    namespace: snow-cost
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: slack-cost
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → azure-cloud-cost-anomaly-to-servicenow.yml

Processes a password reset request from ServiceNow, triggers the reset in Okta, updates the request status, and notifies the user via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Automated Password Reset
  description: Processes a password reset request from ServiceNow, triggers the reset in Okta, updates the request status, and notifies the user via Slack.
  tags:
  - itsm
  - identity-management
  - servicenow
  - okta
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pwd-reset
    port: 8080
    tools:
    - name: process-password-reset
      description: Given a ServiceNow request item number, look up the user, reset their password in Okta, close the request, and notify the user.
      inputParameters:
      - name: ritm_number
        in: body
        type: string
        description: ServiceNow request item number, e.g. RITM0012345.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-ritm
        with:
          number: '{{ritm_number}}'
      - name: reset-okta-password
        type: call
        call: okta.reset-password
        with:
          user_id: '{{get-request.requested_for_email}}'
      - name: close-request
        type: call
        call: servicenow.update-ritm
        with:
          sys_id: '{{get-request.sys_id}}'
          state: closed_complete
      - name: notify-user
        type: call
        call: slack.post-message
        with:
          channel: '{{get-request.requested_for_slack_id}}'
          text: Your password has been reset. Check your email for instructions. Request {{ritm_number}} is now closed.
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: request-items
      path: /table/sc_req_item
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-ritm
        method: GET
    - name: request-item-update
      path: /table/sc_req_item/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-ritm
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://servicenow.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{user_id}}/lifecycle/reset_password
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: reset-password
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-automated-password-reset.yml

Provisions a new hire by creating Okta account, requesting laptop from ServiceNow catalog, granting GitHub access, and notifying IT ops via Slack.

naftiko: '0.5'
info:
  label: ServiceNow New Hire IT Provisioning
  description: Provisions a new hire by creating Okta account, requesting laptop from ServiceNow catalog, granting GitHub access, and notifying IT ops via Slack.
  tags:
  - itsm
  - onboarding
  - servicenow
  - okta
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: it-provisioning
    port: 8080
    tools:
    - name: provision-new-hire
      description: Given employee details from Workday, create Okta account, submit ServiceNow catalog requests for equipment, add to GitHub org, and notify IT.
      inputParameters:
      - name: employee_name
        in: body
        type: string
        description: Full name of the new hire.
      - name: employee_email
        in: body
        type: string
        description: Corporate email address.
      - name: department
        in: body
        type: string
        description: Department name.
      - name: github_username
        in: body
        type: string
        description: GitHub username for org access.
      steps:
      - name: create-okta-user
        type: call
        call: okta.create-user
        with:
          firstName: '{{employee_name}}'
          email: '{{employee_email}}'
          groupIds: '{{department}}-users'
      - name: create-laptop-request
        type: call
        call: servicenow.create-catalog-request
        with:
          cat_item: standard-laptop
          requested_for: '{{employee_email}}'
          description: New hire laptop for {{employee_name}} — {{department}}
      - name: add-to-github
        type: call
        call: github.add-org-member
        with:
          username: '{{github_username}}'
          role: member
      - name: notify-it
        type: call
        call: slack.post-message
        with:
          channel: it-ops
          text: 'New hire provisioned: {{employee_name}} | Okta: created | Laptop: {{create-laptop-request.number}} | GitHub: {{github_username}} added'
  consumes:
  - type: http
    namespace: okta
    baseUri: https://servicenow.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: catalog-requests
      path: /table/sc_request
      operations:
      - name: create-catalog-request
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: org-members
      path: /orgs/servicenow/memberships/{{username}}
      inputParameters:
      - name: username
        in: path
      operations:
      - name: add-org-member
        method: PUT
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-new-hire-it-provisioning.yml

Retrieves recent business rule execution logs from ServiceNow for auditing and compliance review.

naftiko: '0.5'
info:
  label: ServiceNow Business Rule Audit Log
  description: Retrieves recent business rule execution logs from ServiceNow for auditing and compliance review.
  tags:
  - itsm
  - compliance
  - servicenow
  - audit
capability:
  exposes:
  - type: mcp
    namespace: snow-audit
    port: 8080
    tools:
    - name: get-business-rule-logs
      description: Given a table name and time range, return recent business rule execution logs for audit purposes.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: ServiceNow table name to audit.
      call: servicenow.get-audit-logs
      with:
        tablename: '{{table_name}}'
      outputParameters:
      - name: record_count
        type: string
        mapping: $.result.length
      - name: last_execution
        type: string
        mapping: $.result[0].sys_created_on
      - name: rule_name
        type: string
        mapping: $.result[0].name
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: audit-logs
      path: /table/sys_audit
      inputParameters:
      - name: tablename
        in: query
      operations:
      - name: get-audit-logs
        method: GET
Open in Framework → View in Fleet → servicenow-business-rule-audit-log.yml

On a GitHub Actions pipeline failure on a protected branch, creates a ServiceNow incident, adds a Datadog deployment marker, and alerts the on-call channel in Slack.

naftiko: '0.5'
info:
  label: CI/CD Pipeline Failure to ServiceNow Incident
  description: On a GitHub Actions pipeline failure on a protected branch, creates a ServiceNow incident, adds a Datadog deployment marker, and alerts the on-call channel in Slack.
  tags:
  - devops
  - cicd
  - github
  - servicenow
  - datadog
  - slack
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: pipeline-ops
    port: 8080
    tools:
    - name: handle-pipeline-failure
      description: Given a GitHub workflow run ID and repository, fetch the failure details, create a ServiceNow incident, mark the deployment in Datadog, and alert Slack. Use when CI/CD automation detects a protected-branch failure.
      inputParameters:
      - name: github_repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: run_id
        in: body
        type: integer
        description: GitHub Actions workflow run ID.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the failure alert.
      steps:
      - name: get-run
        type: call
        call: github-ci.get-workflow-run
        with:
          repo: '{{github_repo}}'
          runId: '{{run_id}}'
      - name: create-incident
        type: call
        call: snow-cicd.create-incident
        with:
          short_description: 'CI/CD failure: {{get-run.name}} on {{get-run.head_branch}}'
          urgency: '2'
          description: 'Repo: {{github_repo}}

            Run: {{run_id}}

            Branch: {{get-run.head_branch}}

            Commit: {{get-run.head_sha}}'
      - name: create-dd-marker
        type: call
        call: datadog-ci.create-event
        with:
          title: 'Pipeline failure: {{github_repo}}/{{get-run.head_branch}}'
          text: 'Run {{run_id}} failed. Incident: {{create-incident.number}}'
          tags: repo:{{github_repo}},branch:{{get-run.head_branch}}
      - name: alert-slack
        type: call
        call: slack-ci.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Pipeline failure in {{github_repo}} ({{get-run.head_branch}}) | Incident: {{create-incident.number}} | Run: {{run_id}}'
  consumes:
  - type: http
    namespace: github-ci
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: workflow-runs
      path: /repos/{{repo}}/actions/runs/{{runId}}
      inputParameters:
      - name: repo
        in: path
      - name: runId
        in: path
      operations:
      - name: get-workflow-run
        method: GET
  - type: http
    namespace: snow-cicd
    baseUri: https://servicenow.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: 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: slack-ci
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → ci-cd-pipeline-failure-to-servicenow-incident.yml

Aggregates team workload data from ServiceNow tasks and incidents, calculates utilization rates, and posts a capacity summary to Slack.

naftiko: '0.5'
info:
  label: ServiceNow Capacity Planning Report
  description: Aggregates team workload data from ServiceNow tasks and incidents, calculates utilization rates, and posts a capacity summary to Slack.
  tags:
  - itsm
  - capacity-planning
  - servicenow
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: capacity-report
    port: 8080
    tools:
    - name: generate-capacity-report
      description: Given an assignment group name, aggregate open tasks and incidents, calculate utilization, and post a capacity report to Slack.
      inputParameters:
      - name: group_name
        in: body
        type: string
        description: ServiceNow assignment group name.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the report.
      steps:
      - name: get-open-tasks
        type: call
        call: servicenow.query-tasks
        with:
          sysparm_query: assignment_group.name={{group_name}}^stateINnew,in_progress
      - name: get-open-incidents
        type: call
        call: servicenow.query-incidents
        with:
          sysparm_query: assignment_group.name={{group_name}}^stateINnew,in_progress
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Capacity Report for {{group_name}}: {{get-open-tasks.result_count}} open tasks, {{get-open-incidents.result_count}} open incidents. Review workload distribution.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: tasks
      path: /table/task
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-tasks
        method: GET
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-incidents
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-capacity-planning-report.yml

When Terraform Cloud detects configuration drift, creates a ServiceNow incident for infrastructure remediation and alerts the cloud ops team via Slack.

naftiko: '0.5'
info:
  label: Terraform Drift to ServiceNow Incident
  description: When Terraform Cloud detects configuration drift, creates a ServiceNow incident for infrastructure remediation and alerts the cloud ops team via Slack.
  tags:
  - itsm
  - infrastructure
  - servicenow
  - terraform
  - slack
capability:
  exposes:
  - type: mcp
    namespace: tf-drift-incident
    port: 8080
    tools:
    - name: create-drift-incident
      description: Given Terraform workspace details and drift summary, create a ServiceNow incident and notify cloud ops.
      inputParameters:
      - name: workspace_name
        in: body
        type: string
        description: Terraform Cloud workspace name.
      - name: drift_summary
        in: body
        type: string
        description: Summary of detected configuration drift.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Terraform drift: {{workspace_name}}'
          category: infrastructure
          urgency: '2'
          description: 'Configuration drift detected in workspace {{workspace_name}}:

            {{drift_summary}}'
      - name: notify-cloud-ops
        type: call
        call: slack.post-message
        with:
          channel: cloud-ops
          text: 'Terraform Drift Detected: {{workspace_name}} | Incident: {{create-incident.number}} | {{drift_summary}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → terraform-drift-to-servicenow-incident.yml

Exports upcoming scheduled changes from ServiceNow, creates Google Calendar events, and posts a weekly change calendar to Slack.

naftiko: '0.5'
info:
  label: ServiceNow Change Calendar Export
  description: Exports upcoming scheduled changes from ServiceNow, creates Google Calendar events, and posts a weekly change calendar to Slack.
  tags:
  - itsm
  - change-management
  - servicenow
  - google-calendar
  - slack
capability:
  exposes:
  - type: mcp
    namespace: change-calendar
    port: 8080
    tools:
    - name: export-change-calendar
      description: Query upcoming changes for the next 7 days, create Google Calendar events, and post a calendar summary to Slack.
      inputParameters:
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the calendar summary.
      steps:
      - name: query-upcoming-changes
        type: call
        call: servicenow.query-changes
        with:
          sysparm_query: stateINscheduled^start_dateRELATIVELT@day@ahead@7
      - name: post-calendar
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Change Calendar (next 7 days): {{query-upcoming-changes.result_count}} changes scheduled. Review at https://servicenow.service-now.com/change_calendar'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: change-requests
      path: /table/change_request
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-changes
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-calendar-export.yml

Retrieves SLA definition details by name, returning target duration, schedule, and associated table.

naftiko: '0.5'
info:
  label: ServiceNow SLA Definition Lookup
  description: Retrieves SLA definition details by name, returning target duration, schedule, and associated table.
  tags:
  - itsm
  - sla
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-sla-def
    port: 8080
    tools:
    - name: get-sla-definition
      description: Given an SLA definition name, return the target duration, schedule, and associated table.
      inputParameters:
      - name: sla_name
        in: body
        type: string
        description: Name of the SLA definition.
      call: servicenow.get-sla-def
      with:
        name: '{{sla_name}}'
      outputParameters:
      - name: duration
        type: string
        mapping: $.result[0].duration
      - name: schedule
        type: string
        mapping: $.result[0].schedule.display_value
      - name: table
        type: string
        mapping: $.result[0].collection
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: sla-definitions
      path: /table/contract_sla
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-sla-def
        method: GET
Open in Framework → View in Fleet → servicenow-sla-definition-lookup.yml

Evaluates a change request against CMDB impact data, calculates risk score, updates the change record, and notifies the CAB via Microsoft Teams.

naftiko: '0.5'
info:
  label: ServiceNow Change Risk Assessment
  description: Evaluates a change request against CMDB impact data, calculates risk score, updates the change record, and notifies the CAB via Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - microsoft-teams
  - risk-management
capability:
  exposes:
  - type: mcp
    namespace: change-risk
    port: 8080
    tools:
    - name: assess-change-risk
      description: Given a change request number, query impacted CIs, compute risk score, update the change record, and notify the CAB in Teams.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: ServiceNow change request number.
      steps:
      - name: get-change
        type: call
        call: servicenow.get-change
        with:
          number: '{{change_number}}'
      - name: get-impacted-cis
        type: call
        call: servicenow.get-affected-cis
        with:
          task: '{{get-change.sys_id}}'
      - name: update-risk
        type: call
        call: servicenow.update-change
        with:
          sys_id: '{{get-change.sys_id}}'
          risk: '{{get-impacted-cis.risk_score}}'
      - name: notify-cab
        type: call
        call: teams.post-message
        with:
          channel_id: $secrets.teams_cab_channel_id
          text: 'Change {{change_number}} risk assessed: {{get-impacted-cis.risk_score}} | Impacted CIs: {{get-impacted-cis.count}} | Review required before approval.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: change-requests
      path: /table/change_request
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-change
        method: GET
    - name: affected-cis
      path: /table/task_ci
      inputParameters:
      - name: task
        in: query
      operations:
      - name: get-affected-cis
        method: GET
    - name: change-update
      path: /table/change_request/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      - name: risk
        in: body
      operations:
      - name: update-change
        method: PATCH
  - type: http
    namespace: teams
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.teams_token
    resources:
    - name: channel-messages
      path: /teams/$secrets.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-risk-assessment.yml

Retrieves department details from ServiceNow by name, returning head count, manager, and cost center.

naftiko: '0.5'
info:
  label: ServiceNow Department Lookup
  description: Retrieves department details from ServiceNow by name, returning head count, manager, and cost center.
  tags:
  - itsm
  - organization
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-dept
    port: 8080
    tools:
    - name: get-department
      description: Given a department name, return the department head, cost center, and business unit.
      inputParameters:
      - name: dept_name
        in: body
        type: string
        description: Department name to look up.
      call: servicenow.get-department
      with:
        name: '{{dept_name}}'
      outputParameters:
      - name: head
        type: string
        mapping: $.result[0].dept_head.display_value
      - name: cost_center
        type: string
        mapping: $.result[0].cost_center.display_value
      - name: business_unit
        type: string
        mapping: $.result[0].business_unit.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: departments
      path: /table/cmn_department
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-department
        method: GET
Open in Framework → View in Fleet → servicenow-department-lookup.yml

Searches the ServiceNow knowledge base for articles matching a query, returning title, body excerpt, and view count.

naftiko: '0.5'
info:
  label: ServiceNow Knowledge Article Lookup
  description: Searches the ServiceNow knowledge base for articles matching a query, returning title, body excerpt, and view count.
  tags:
  - itsm
  - knowledge-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-kb
    port: 8080
    tools:
    - name: search-knowledge
      description: Given a search query, return matching knowledge base articles with title, excerpt, and view count.
      inputParameters:
      - name: query
        in: body
        type: string
        description: Search string to look up in the ServiceNow knowledge base.
      call: servicenow.search-kb
      with:
        text: '{{query}}'
      outputParameters:
      - name: article_id
        type: string
        mapping: $.result[0].number
      - name: title
        type: string
        mapping: $.result[0].short_description
      - name: view_count
        type: string
        mapping: $.result[0].sys_view_count
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: knowledge-articles
      path: /table/kb_knowledge
      inputParameters:
      - name: text
        in: query
      operations:
      - name: search-kb
        method: GET
Open in Framework → View in Fleet → servicenow-knowledge-article-lookup.yml

When an incident is created, searches Confluence for matching runbooks and attaches the link to the incident work notes.

naftiko: '0.5'
info:
  label: ServiceNow Confluence Runbook Linker
  description: When an incident is created, searches Confluence for matching runbooks and attaches the link to the incident work notes.
  tags:
  - itsm
  - knowledge-management
  - servicenow
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: runbook-linker
    port: 8080
    tools:
    - name: link-runbook-to-incident
      description: Given an incident number, search Confluence for relevant runbooks and attach the best match to the incident.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: search-runbooks
        type: call
        call: confluence.search
        with:
          cql: label = runbook AND text ~ "{{get-incident.category}}"
      - name: update-work-notes
        type: call
        call: servicenow.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          work_notes: 'Suggested runbook: {{search-runbooks.results[0].title}} — {{search-runbooks.results[0].url}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: confluence
    baseUri: https://servicenow-corp.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: search
      path: /search
      inputParameters:
      - name: cql
        in: query
      operations:
      - name: search
        method: GET
Open in Framework → View in Fleet → servicenow-confluence-runbook-linker.yml

Retrieves application details from the CMDB by name, returning owner, support group, and business criticality.

naftiko: '0.5'
info:
  label: ServiceNow Application Lookup
  description: Retrieves application details from the CMDB by name, returning owner, support group, and business criticality.
  tags:
  - itsm
  - cmdb
  - servicenow
  - application-management
capability:
  exposes:
  - type: mcp
    namespace: snow-app
    port: 8080
    tools:
    - name: get-application
      description: Given an application name, return its owner, support group, and business criticality from the CMDB.
      inputParameters:
      - name: app_name
        in: body
        type: string
        description: Application name to look up.
      call: servicenow.get-application
      with:
        name: '{{app_name}}'
      outputParameters:
      - name: owner
        type: string
        mapping: $.result[0].owned_by.display_value
      - name: support_group
        type: string
        mapping: $.result[0].support_group.display_value
      - name: criticality
        type: string
        mapping: $.result[0].busines_criticality.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: applications
      path: /table/cmdb_ci_appl
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-application
        method: GET
Open in Framework → View in Fleet → servicenow-application-lookup.yml

When the ServiceNow Virtual Agent cannot resolve a user query, creates an incident with conversation context and routes to a live agent via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Virtual Agent Conversation Handoff
  description: When the ServiceNow Virtual Agent cannot resolve a user query, creates an incident with conversation context and routes to a live agent via Slack.
  tags:
  - itsm
  - virtual-agent
  - servicenow
  - slack
  - customer-service
capability:
  exposes:
  - type: mcp
    namespace: va-handoff
    port: 8080
    tools:
    - name: handoff-to-live-agent
      description: Given a conversation ID and user query, create an incident with conversation context and notify the support team via Slack for live agent handoff.
      inputParameters:
      - name: conversation_id
        in: body
        type: string
        description: Virtual Agent conversation ID.
      - name: user_query
        in: body
        type: string
        description: The user's unresolved query.
      - name: caller_id
        in: body
        type: string
        description: ServiceNow sys_id of the calling user.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'VA Handoff: {{user_query}}'
          caller_id: '{{caller_id}}'
          description: 'Virtual Agent conversation {{conversation_id}} could not resolve: {{user_query}}'
          category: inquiry
      - name: notify-support
        type: call
        call: slack.post-message
        with:
          channel: live-support
          text: 'Live agent needed: {{create-incident.number}} — {{user_query}} | Conversation: {{conversation_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-virtual-agent-conversation-handoff.yml

Retrieves a ServiceNow incident record by number, returning priority, state, assignment group, and short description.

naftiko: '0.5'
info:
  label: ServiceNow Incident Lookup
  description: Retrieves a ServiceNow incident record by number, returning priority, state, assignment group, and short description.
  tags:
  - itsm
  - incident-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-incident
    port: 8080
    tools:
    - name: get-incident
      description: Given a ServiceNow incident number, return the incident priority, state, assigned group, and short description.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number, e.g. INC0012345.
      call: servicenow.get-incident
      with:
        number: '{{incident_number}}'
      outputParameters:
      - name: sys_id
        type: string
        mapping: $.result[0].sys_id
      - name: priority
        type: string
        mapping: $.result[0].priority.display_value
      - name: state
        type: string
        mapping: $.result[0].state.display_value
      - name: assignment_group
        type: string
        mapping: $.result[0].assignment_group.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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
Open in Framework → View in Fleet → servicenow-incident-lookup.yml

When Okta detects a suspicious authentication event (impossible travel or new device), creates a ServiceNow security incident and alerts the user and security team via Slack.

naftiko: '0.5'
info:
  label: Okta Suspicious Login to ServiceNow Alert
  description: When Okta detects a suspicious authentication event (impossible travel or new device), creates a ServiceNow security incident and alerts the user and security team via Slack.
  tags:
  - security
  - identity
  - okta
  - servicenow
  - slack
  - threat-detection
capability:
  exposes:
  - type: mcp
    namespace: identity-security
    port: 8080
    tools:
    - name: handle-suspicious-login
      description: Given an Okta system log event ID for a suspicious login, fetch event details, create a ServiceNow security incident, and notify both the affected user and security team in Slack.
      inputParameters:
      - name: okta_event_id
        in: body
        type: string
        description: Okta system log event UUID for the suspicious login.
      - name: security_slack_channel
        in: body
        type: string
        description: Slack channel for the security team notification.
      steps:
      - name: get-okta-event
        type: call
        call: okta-log.get-log-event
        with:
          eventId: '{{okta_event_id}}'
      - name: create-sec-incident
        type: call
        call: snow-okta.create-incident
        with:
          short_description: 'Suspicious Okta login: {{get-okta-event.actor.displayName}}'
          severity: '2'
          description: 'User: {{get-okta-event.actor.displayName}}

            IP: {{get-okta-event.client.ipAddress}}

            Location: {{get-okta-event.client.geographicalContext.city}}

            Event: {{okta_event_id}}'
      - name: alert-security-slack
        type: call
        call: slack-okta.post-message
        with:
          channel: '{{security_slack_channel}}'
          text: 'Suspicious login detected for {{get-okta-event.actor.displayName}} from {{get-okta-event.client.geographicalContext.city}} | Incident: {{create-sec-incident.number}}'
  consumes:
  - type: http
    namespace: okta-log
    baseUri: https://servicenow.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: log-events
      path: /logs
      inputParameters:
      - name: eventId
        in: query
      operations:
      - name: get-log-event
        method: GET
  - type: http
    namespace: snow-okta
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: security-incidents
      path: /table/sn_si_incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack-okta
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → okta-suspicious-login-to-servicenow-alert.yml

When a ServiceNow incident is promoted to Major Incident, creates a Zoom meeting, posts the join link to Slack, and assigns an Jira P0 tracking ticket.

naftiko: '0.5'
info:
  label: ServiceNow Major Incident War Room
  description: When a ServiceNow incident is promoted to Major Incident, creates a Zoom meeting, posts the join link to Slack, and assigns an Jira P0 tracking ticket.
  tags:
  - itsm
  - incident-response
  - servicenow
  - zoom
  - slack
  - jira
  - major-incident
capability:
  exposes:
  - type: mcp
    namespace: major-incident-ops
    port: 8080
    tools:
    - name: open-war-room
      description: Given a ServiceNow major incident number, create a Zoom war room meeting, post the join link to the incidents Slack channel, and open a Jira P0 tracking ticket.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number promoted to Major Incident.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to post the war room link.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for the P0 tracking ticket.
      steps:
      - name: get-incident
        type: call
        call: snow-mi.get-incident
        with:
          number: '{{incident_number}}'
      - name: create-zoom
        type: call
        call: zoom.create-meeting
        with:
          topic: 'War Room: {{get-incident.short_description}}'
          duration: 120
      - name: post-war-room
        type: call
        call: slack-mi.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'MAJOR INCIDENT: {{incident_number}} — {{get-incident.short_description}} | War Room: {{create-zoom.join_url}}'
      - name: create-jira-p0
        type: call
        call: jira-mi.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Bug
          summary: 'P0: {{get-incident.short_description}}'
          description: 'ServiceNow Incident: {{incident_number}}

            Zoom: {{create-zoom.join_url}}'
  consumes:
  - type: http
    namespace: snow-mi
    baseUri: https://servicenow.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: 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-mi
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
  - type: http
    namespace: jira-mi
    baseUri: https://servicenow.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → servicenow-major-incident-war-room.yml

Routes a high-value IT request through a multi-level approval chain, notifying each approver via Slack and updating ServiceNow at each stage.

naftiko: '0.5'
info:
  label: ServiceNow IT Request Approval Chain
  description: Routes a high-value IT request through a multi-level approval chain, notifying each approver via Slack and updating ServiceNow at each stage.
  tags:
  - itsm
  - approval-workflow
  - servicenow
  - slack
  - governance
capability:
  exposes:
  - type: mcp
    namespace: request-approval
    port: 8080
    tools:
    - name: route-approval-chain
      description: Given a request item number, look up the request details, notify the first approver via Slack, and update the approval state in ServiceNow.
      inputParameters:
      - name: ritm_number
        in: body
        type: string
        description: ServiceNow request item number.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-ritm
        with:
          number: '{{ritm_number}}'
      - name: get-approver
        type: call
        call: servicenow.get-approval
        with:
          sysapproval: '{{get-request.sys_id}}'
      - name: notify-approver
        type: call
        call: slack.post-message
        with:
          channel: '{{get-approver.approver_slack_id}}'
          text: 'Approval needed: {{ritm_number}} — {{get-request.short_description}} | Cost: {{get-request.price}} | Approve at: https://servicenow.service-now.com/nav_to.do?uri=sc_req_item.do?sys_id={{get-request.sys_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: request-items
      path: /table/sc_req_item
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-ritm
        method: GET
    - name: approvals
      path: /table/sysapproval_approver
      inputParameters:
      - name: sysapproval
        in: query
      operations:
      - name: get-approval
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-request-approval-chain.yml

Routes a facilities request to the building management team, creates a work order, and notifies the requester via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Facilities Request Fulfillment
  description: Routes a facilities request to the building management team, creates a work order, and notifies the requester via Slack.
  tags:
  - itsm
  - facilities-management
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: facilities
    port: 8080
    tools:
    - name: fulfill-facilities-request
      description: Given a facilities request number, create a work order, assign it to building management, and notify the requester.
      inputParameters:
      - name: request_number
        in: body
        type: string
        description: ServiceNow facilities request number.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-request
        with:
          number: '{{request_number}}'
      - name: create-work-order
        type: call
        call: servicenow.create-work-order
        with:
          short_description: '{{get-request.short_description}}'
          assignment_group: building-management
          location: '{{get-request.location}}'
      - name: notify-requester
        type: call
        call: slack.post-message
        with:
          channel: '{{get-request.requester_slack_id}}'
          text: 'Your facilities request {{request_number}} has been assigned. Work order: {{create-work-order.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: requests
      path: /table/sc_request
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-request
        method: GET
    - name: work-orders
      path: /table/wm_order
      operations:
      - name: create-work-order
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-facilities-request-fulfillment.yml

Drafts a knowledge article in ServiceNow from an incident post-mortem stored in Confluence and publishes it to the internal knowledge base.

naftiko: '0.5'
info:
  label: ServiceNow Knowledge Article Publication
  description: Drafts a knowledge article in ServiceNow from an incident post-mortem stored in Confluence and publishes it to the internal knowledge base.
  tags:
  - itsm
  - knowledge-management
  - servicenow
  - confluence
  - ai
capability:
  exposes:
  - type: mcp
    namespace: knowledge-ops
    port: 8080
    tools:
    - name: publish-knowledge-article
      description: Given a Confluence page ID containing an incident post-mortem, extract content using OpenAI to format it as a KB article, and publish it to ServiceNow Knowledge.
      inputParameters:
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID of the post-mortem document.
      - name: snow_kb_category
        in: body
        type: string
        description: ServiceNow knowledge base category sys_id.
      steps:
      - name: get-page
        type: call
        call: confluence.get-page
        with:
          pageId: '{{confluence_page_id}}'
      - name: format-kb-article
        type: call
        call: openai.format-kb-content
        with:
          content: '{{get-page.body}}'
          sourceUrl: '{{get-page.url}}'
      - name: create-kb-article
        type: call
        call: snow-kb.create-article
        with:
          short_description: '{{format-kb-article.title}}'
          text: '{{format-kb-article.body}}'
          kb_category: '{{snow_kb_category}}'
          workflow_state: published
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://servicenow.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: pages
      path: /content/{{pageId}}
      inputParameters:
      - name: pageId
        in: path
      operations:
      - name: get-page
        method: GET
  - type: http
    namespace: openai
    baseUri: https://api.openai.com/v1
    authentication:
      type: bearer
      token: $secrets.openai_token
    resources:
    - name: chat-completions
      path: /chat/completions
      operations:
      - name: format-kb-content
        method: POST
  - type: http
    namespace: snow-kb
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: knowledge-articles
      path: /table/kb_knowledge
      operations:
      - name: create-article
        method: POST
Open in Framework → View in Fleet → servicenow-knowledge-article-publication.yml

Upon security incident creation, disables the affected user account in Okta, quarantines the endpoint via CrowdStrike, and updates the security incident with containment actions.

naftiko: '0.5'
info:
  label: ServiceNow Security Incident Containment
  description: Upon security incident creation, disables the affected user account in Okta, quarantines the endpoint via CrowdStrike, and updates the security incident with containment actions.
  tags:
  - itsm
  - security
  - servicenow
  - okta
  - crowdstrike
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: sec-containment
    port: 8080
    tools:
    - name: contain-security-incident
      description: Given a security incident number, disable the affected user in Okta, contain the endpoint via CrowdStrike Falcon, and update the incident.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow security incident number.
      steps:
      - name: get-sec-incident
        type: call
        call: servicenow.get-sec-incident
        with:
          number: '{{incident_number}}'
      - name: disable-okta-user
        type: call
        call: okta.suspend-user
        with:
          user_id: '{{get-sec-incident.affected_user_email}}'
      - name: contain-endpoint
        type: call
        call: crowdstrike.contain-host
        with:
          hostname: '{{get-sec-incident.affected_host}}'
      - name: update-incident
        type: call
        call: servicenow.update-sec-incident
        with:
          sys_id: '{{get-sec-incident.sys_id}}'
          work_notes: 'Containment actions: Okta account suspended, endpoint {{get-sec-incident.affected_host}} network-contained via CrowdStrike'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: security-incidents
      path: /table/sn_si_incident
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-sec-incident
        method: GET
    - name: sec-incident-update
      path: /table/sn_si_incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-sec-incident
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://servicenow.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{user_id}}/lifecycle/suspend
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: suspend-user
        method: POST
  - type: http
    namespace: crowdstrike
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.falcon_oauth_token
    resources:
    - name: hosts
      path: /devices/entities/host-actions/v2
      operations:
      - name: contain-host
        method: POST
Open in Framework → View in Fleet → servicenow-security-incident-containment.yml

Detects recently reopened incidents, creates a quality review task, and alerts the service desk manager via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Incident Reopen Detector
  description: Detects recently reopened incidents, creates a quality review task, and alerts the service desk manager via Slack.
  tags:
  - itsm
  - quality-assurance
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: reopen-detect
    port: 8080
    tools:
    - name: detect-reopened-incidents
      description: Query for incidents reopened in the last 24 hours, create a quality review task, and notify the service desk manager.
      inputParameters:
      - name: hours
        in: body
        type: string
        description: Number of hours to look back for reopened incidents.
      steps:
      - name: query-reopened
        type: call
        call: servicenow.query-incidents
        with:
          sysparm_query: reopened=true^sys_updated_onRELATIVEGE@hour@ago@{{hours}}
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Quality review: {{query-reopened.result_count}} reopened incidents in last {{hours}} hours'
          assignment_group: service-desk-management
      - name: notify-manager
        type: call
        call: slack.post-message
        with:
          channel: service-desk-mgmt
          text: 'Reopen Alert: {{query-reopened.result_count}} incidents reopened in the last {{hours}} hours. Review task: {{create-review-task.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-incidents
        method: GET
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-reopen-detector.yml

Retrieves an unassigned incident, looks up the appropriate assignment group based on category, assigns the incident, and notifies the group via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Incident Auto-Assignment
  description: Retrieves an unassigned incident, looks up the appropriate assignment group based on category, assigns the incident, and notifies the group via Slack.
  tags:
  - itsm
  - incident-management
  - servicenow
  - slack
  - automation
capability:
  exposes:
  - type: mcp
    namespace: incident-assign
    port: 8080
    tools:
    - name: auto-assign-incident
      description: Given an incident number, determine the correct assignment group by category, update the incident, and notify the team in Slack.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number to auto-assign.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: assign-incident
        type: call
        call: servicenow.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          assignment_group: '{{get-incident.category}}-support'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{get-incident.category}}-support'
          text: 'New incident assigned: {{incident_number}} — {{get-incident.short_description}} | Priority: {{get-incident.priority}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      - name: assignment_group
        in: body
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-auto-assignment.yml

Aggregates cloud cost data from AWS and Azure, stores the summary in ServiceNow ITFM, and sends a cost optimization alert to Slack.

naftiko: '0.5'
info:
  label: ServiceNow Multi-Cloud Cost Aggregator
  description: Aggregates cloud cost data from AWS and Azure, stores the summary in ServiceNow ITFM, and sends a cost optimization alert to Slack.
  tags:
  - itsm
  - financial-management
  - servicenow
  - aws
  - slack
  - cloud-governance
capability:
  exposes:
  - type: mcp
    namespace: cloud-cost
    port: 8080
    tools:
    - name: aggregate-cloud-costs
      description: Pull cost data from AWS Cost Explorer, store aggregated totals in ServiceNow ITFM, and alert finance via Slack.
      inputParameters:
      - name: month
        in: body
        type: string
        description: Month to aggregate costs for, e.g. 2026-03.
      steps:
      - name: get-aws-costs
        type: call
        call: aws-ce.get-cost
        with:
          time_period_start: '{{month}}-01'
          time_period_end: '{{month}}-31'
          granularity: MONTHLY
      - name: store-in-snow
        type: call
        call: servicenow.create-cost-record
        with:
          provider: AWS
          amount: '{{get-aws-costs.total}}'
          period: '{{month}}'
      - name: notify-finance
        type: call
        call: slack.post-message
        with:
          channel: cloud-finops
          text: 'Cloud Cost Report for {{month}}: AWS: ${{get-aws-costs.total}} | Stored in ServiceNow ITFM. Review at https://servicenow.service-now.com/itfm'
  consumes:
  - type: http
    namespace: aws-ce
    baseUri: https://ce.us-east-1.amazonaws.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.aws_auth_header
      placement: header
    resources:
    - name: costs
      path: /GetCostAndUsage
      operations:
      - name: get-cost
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: cost-records
      path: /table/fm_ci_cost
      operations:
      - name: create-cost-record
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-multi-cloud-cost-aggregator.yml

Uses Anthropic Claude to analyze incident descriptions, auto-categorize and assign priority, then updates the incident record and notifies the appropriate team.

naftiko: '0.5'
info:
  label: ServiceNow Incident AI Categorization
  description: Uses Anthropic Claude to analyze incident descriptions, auto-categorize and assign priority, then updates the incident record and notifies the appropriate team.
  tags:
  - itsm
  - ai
  - servicenow
  - anthropic
  - automation
capability:
  exposes:
  - type: mcp
    namespace: ai-categorize
    port: 8080
    tools:
    - name: categorize-incident
      description: Given an incident number, use AI to determine the correct category and priority, update the incident, and notify the assigned team.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number to categorize.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: ai-classify
        type: call
        call: anthropic.create-message
        with:
          model: claude-sonnet-4-20250514
          max_tokens: 256
          system: You are an ITSM classifier. Return JSON with category, subcategory, and priority fields.
          content: 'Classify this incident: {{get-incident.short_description}} — {{get-incident.description}}'
      - name: update-incident
        type: call
        call: servicenow.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          category: '{{ai-classify.category}}'
          priority: '{{ai-classify.priority}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - 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 → servicenow-incident-ai-categorization.yml

When CrowdStrike detects a threat on an endpoint, creates a ServiceNow security incident, isolates the host via CrowdStrike, and alerts the security team in Slack.

naftiko: '0.5'
info:
  label: CrowdStrike Detection to ServiceNow Security Incident
  description: When CrowdStrike detects a threat on an endpoint, creates a ServiceNow security incident, isolates the host via CrowdStrike, and alerts the security team in Slack.
  tags:
  - security
  - endpoint
  - crowdstrike
  - servicenow
  - slack
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: edr-ops
    port: 8080
    tools:
    - name: respond-to-crowdstrike-detection
      description: Given a CrowdStrike detection ID, fetch the alert details, create a ServiceNow security incident, isolate the affected host, and notify the security Slack channel.
      inputParameters:
      - name: detection_id
        in: body
        type: string
        description: CrowdStrike detection ID from the Falcon alert.
      - name: security_slack_channel
        in: body
        type: string
        description: Slack channel for the security team.
      steps:
      - name: get-detection
        type: call
        call: crowdstrike.get-detection
        with:
          detectionId: '{{detection_id}}'
      - name: create-security-incident
        type: call
        call: snow-edr.create-incident
        with:
          short_description: 'CrowdStrike detection: {{get-detection.behavior.scenario}}'
          severity: '1'
          description: 'Host: {{get-detection.device.hostname}}

            User: {{get-detection.behavior.user_name}}

            Detection: {{detection_id}}

            Severity: {{get-detection.max_severity_displayname}}'
      - name: isolate-host
        type: call
        call: crowdstrike-action.contain-host
        with:
          deviceId: '{{get-detection.device.device_id}}'
      - name: alert-security
        type: call
        call: slack-edr.post-message
        with:
          channel: '{{security_slack_channel}}'
          text: 'CrowdStrike threat detected on {{get-detection.device.hostname}} | Host isolated | Incident: {{create-security-incident.number}} | Detection: {{detection_id}}'
  consumes:
  - type: http
    namespace: crowdstrike
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_token
    resources:
    - name: detections
      path: /detects/entities/detect/v2
      inputParameters:
      - name: detectionId
        in: query
      operations:
      - name: get-detection
        method: GET
  - type: http
    namespace: snow-edr
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: security-incidents
      path: /table/sn_si_incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: crowdstrike-action
    baseUri: https://api.crowdstrike.com
    authentication:
      type: bearer
      token: $secrets.crowdstrike_token
    resources:
    - name: device-actions
      path: /devices/entities/devices-actions/v2
      operations:
      - name: contain-host
        method: POST
  - type: http
    namespace: slack-edr
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → crowdstrike-detection-to-servicenow-security-incident.yml

Aggregates IT satisfaction survey results from ServiceNow, calculates NPS and satisfaction scores, and posts a summary to Slack.

naftiko: '0.5'
info:
  label: ServiceNow IT Survey Results Digest
  description: Aggregates IT satisfaction survey results from ServiceNow, calculates NPS and satisfaction scores, and posts a summary to Slack.
  tags:
  - itsm
  - customer-satisfaction
  - servicenow
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: survey-digest
    port: 8080
    tools:
    - name: generate-survey-digest
      description: Query recent survey responses, compute satisfaction metrics, and post a digest to Slack.
      inputParameters:
      - name: days
        in: body
        type: string
        description: Number of days of survey data to aggregate.
      steps:
      - name: query-surveys
        type: call
        call: servicenow.query-surveys
        with:
          sysparm_query: sys_created_onRELATIVEGE@day@ago@{{days}}
      - name: post-digest
        type: call
        call: slack.post-message
        with:
          channel: it-leadership
          text: 'IT Survey Digest ({{days}} days): Responses: {{query-surveys.result_count}} | Avg satisfaction: {{query-surveys.avg_score}} | NPS: {{query-surveys.nps_score}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: surveys
      path: /table/asmt_assessment_instance
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-surveys
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-survey-results-digest.yml

Uses AI to compare a new incident against recent open incidents, identifies potential duplicates, and suggests merging via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Duplicate Incident Detector
  description: Uses AI to compare a new incident against recent open incidents, identifies potential duplicates, and suggests merging via Slack.
  tags:
  - itsm
  - incident-management
  - servicenow
  - anthropic
  - slack
capability:
  exposes:
  - type: mcp
    namespace: dup-detect
    port: 8080
    tools:
    - name: detect-duplicate-incidents
      description: Given a new incident number, compare its description against recent open incidents using AI, and flag potential duplicates.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: New incident number to check for duplicates.
      steps:
      - name: get-new-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: query-recent
        type: call
        call: servicenow.query-incidents
        with:
          sysparm_query: stateINnew,in_progress^opened_atRELATIVEGE@day@ago@7^number!=={{incident_number}}
      - name: ai-compare
        type: call
        call: anthropic.create-message
        with:
          model: claude-sonnet-4-20250514
          max_tokens: 512
          system: You are a duplicate incident detector. Compare the new incident against the list and return potential duplicates with confidence scores.
          content: 'New incident: {{get-new-incident.short_description}}


            Recent incidents: {{query-recent.descriptions}}'
      - name: post-findings
        type: call
        call: slack.post-message
        with:
          channel: service-desk
          text: 'Duplicate check for {{incident_number}}: {{ai-compare.content}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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
      - name: sysparm_query
        in: query
      operations:
      - name: get-incident
        method: GET
      - name: query-incidents
        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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-duplicate-incident-detector.yml

Runs a CMDB health check, identifies stale configuration items, generates an audit report, and posts findings to a Slack channel.

naftiko: '0.5'
info:
  label: ServiceNow CMDB Health Audit
  description: Runs a CMDB health check, identifies stale configuration items, generates an audit report, and posts findings to a Slack channel.
  tags:
  - itsm
  - cmdb
  - servicenow
  - slack
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: cmdb-audit
    port: 8080
    tools:
    - name: audit-cmdb-health
      description: Query the CMDB for stale CIs not updated in the given number of days, generate a summary report, and post findings to Slack.
      inputParameters:
      - name: stale_days
        in: body
        type: string
        description: Number of days since last update to consider a CI stale.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for posting audit results.
      steps:
      - name: query-stale-cis
        type: call
        call: servicenow.query-cmdb
        with:
          sysparm_query: sys_updated_onRELATIVELT@dayofweek@ago@{{stale_days}}
      - name: post-audit-report
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'CMDB Health Audit: Found {{query-stale-cis.result_count}} CIs not updated in {{stale_days}} days. Review required for compliance.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: cmdb-items
      path: /table/cmdb_ci
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-cmdb
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-cmdb-health-audit.yml

Queries ServiceNow GRC for active compliance exceptions nearing expiry, creates renewal tasks, and alerts the compliance team.

naftiko: '0.5'
info:
  label: ServiceNow Compliance Exception Tracker
  description: Queries ServiceNow GRC for active compliance exceptions nearing expiry, creates renewal tasks, and alerts the compliance team.
  tags:
  - itsm
  - compliance
  - servicenow
  - slack
  - governance
capability:
  exposes:
  - type: mcp
    namespace: compliance-exceptions
    port: 8080
    tools:
    - name: track-compliance-exceptions
      description: Query for compliance exceptions expiring within a given number of days and create renewal tasks.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: string
        description: Days before expiry to flag exceptions.
      steps:
      - name: query-exceptions
        type: call
        call: servicenow.query-exceptions
        with:
          sysparm_query: expiration_dateRELATIVELT@day@ahead@{{days_until_expiry}}^active=true
      - name: create-renewal-tasks
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Compliance exception renewal: {{query-exceptions.result_count}} exceptions expiring within {{days_until_expiry}} days'
          assignment_group: compliance
      - name: notify-compliance
        type: call
        call: slack.post-message
        with:
          channel: compliance
          text: 'Exception Expiry Alert: {{query-exceptions.result_count}} compliance exceptions expiring within {{days_until_expiry}} days. Task: {{create-renewal-tasks.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: exceptions
      path: /table/sn_compliance_exception
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-exceptions
        method: GET
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-compliance-exception-tracker.yml

Aggregates open incident counts, SLA breach rates, and change success rates from ServiceNow and publishes a daily ops digest to a Slack channel.

naftiko: '0.5'
info:
  label: ServiceNow IT Operations Dashboard Digest
  description: Aggregates open incident counts, SLA breach rates, and change success rates from ServiceNow and publishes a daily ops digest to a Slack channel.
  tags:
  - itsm
  - reporting
  - servicenow
  - slack
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: ops-digest
    port: 8080
    tools:
    - name: publish-ops-digest
      description: Gather current open incident counts, SLA breach counts, and change success rates from ServiceNow aggregate APIs and post a formatted digest to the specified Slack channel.
      inputParameters:
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to post the daily ops digest.
      steps:
      - name: get-incident-stats
        type: call
        call: snow-stats.get-incident-stats
      - name: get-change-stats
        type: call
        call: snow-stats.get-change-stats
      - name: post-digest
        type: call
        call: slack-digest.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Daily IT Ops Digest: Open Incidents={{get-incident-stats.openCount}} | SLA Breached={{get-incident-stats.slaBreached}} | Changes Today={{get-change-stats.total}} | Success Rate={{get-change-stats.successRate}}%'
  consumes:
  - type: http
    namespace: snow-stats
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incident-stats
      path: /stats/incident
      operations:
      - name: get-incident-stats
        method: GET
    - name: change-stats
      path: /stats/change_request
      operations:
      - name: get-change-stats
        method: GET
  - type: http
    namespace: slack-digest
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-operations-dashboard-digest.yml

Queries the CMDB for hardware assets approaching end-of-life, creates replacement requests in the service catalog, and alerts the IT procurement team via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Hardware Lifecycle Tracker
  description: Queries the CMDB for hardware assets approaching end-of-life, creates replacement requests in the service catalog, and alerts the IT procurement team via Slack.
  tags:
  - itsm
  - asset-management
  - servicenow
  - slack
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: hw-lifecycle
    port: 8080
    tools:
    - name: track-hardware-eol
      description: Query CMDB for hardware nearing end-of-life within a given number of months, create catalog replacement requests, and notify procurement.
      inputParameters:
      - name: months_until_eol
        in: body
        type: string
        description: Number of months before end-of-life to flag assets.
      steps:
      - name: query-eol-assets
        type: call
        call: servicenow.query-hardware-eol
        with:
          sysparm_query: install_statusINoperational^end_of_lifeRELATIVELT@month@ahead@{{months_until_eol}}
      - name: create-replacement-request
        type: call
        call: servicenow.create-catalog-request
        with:
          cat_item: hardware-replacement
          description: EOL hardware replacement needed for {{query-eol-assets.result_count}} assets
      - name: notify-procurement
        type: call
        call: slack.post-message
        with:
          channel: it-procurement
          text: 'Hardware EOL Alert: {{query-eol-assets.result_count}} assets reaching end-of-life within {{months_until_eol}} months. Replacement request: {{create-replacement-request.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: hardware
      path: /table/cmdb_ci_hardware
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-hardware-eol
        method: GET
    - name: catalog-requests
      path: /table/sc_request
      operations:
      - name: create-catalog-request
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-hardware-lifecycle-tracker.yml

Retrieves cloud instance details from the ServiceNow CMDB, returning instance type, region, and associated application.

naftiko: '0.5'
info:
  label: ServiceNow Cloud Instance Lookup
  description: Retrieves cloud instance details from the ServiceNow CMDB, returning instance type, region, and associated application.
  tags:
  - itsm
  - cmdb
  - servicenow
  - cloud
capability:
  exposes:
  - type: mcp
    namespace: snow-cloud
    port: 8080
    tools:
    - name: get-cloud-instance
      description: Given a cloud instance ID, return its type, region, state, and associated application from the CMDB.
      inputParameters:
      - name: instance_id
        in: body
        type: string
        description: Cloud instance ID.
      call: servicenow.get-cloud-instance
      with:
        object_id: '{{instance_id}}'
      outputParameters:
      - name: instance_type
        type: string
        mapping: $.result[0].size
      - name: region
        type: string
        mapping: $.result[0].region
      - name: state
        type: string
        mapping: $.result[0].state
      - name: application
        type: string
        mapping: $.result[0].application.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: cloud-instances
      path: /table/cmdb_ci_vm_instance
      inputParameters:
      - name: object_id
        in: query
      operations:
      - name: get-cloud-instance
        method: GET
Open in Framework → View in Fleet → servicenow-cloud-instance-lookup.yml

Fetches performance metrics from Datadog for a host, enriches the corresponding ServiceNow CMDB CI with current health data.

naftiko: '0.5'
info:
  label: ServiceNow Datadog Metric to CI Enrichment
  description: Fetches performance metrics from Datadog for a host, enriches the corresponding ServiceNow CMDB CI with current health data.
  tags:
  - itsm
  - cmdb
  - servicenow
  - datadog
  - observability
capability:
  exposes:
  - type: mcp
    namespace: dd-ci-enrich
    port: 8080
    tools:
    - name: enrich-ci-with-metrics
      description: Given a hostname, fetch Datadog metrics and update the CMDB CI with performance health attributes.
      inputParameters:
      - name: hostname
        in: body
        type: string
        description: Hostname to fetch metrics for.
      steps:
      - name: get-dd-metrics
        type: call
        call: datadog.get-host-metrics
        with:
          filter: host:{{hostname}}
      - name: get-ci
        type: call
        call: servicenow.get-ci
        with:
          name: '{{hostname}}'
      - name: update-ci
        type: call
        call: servicenow.update-ci
        with:
          sys_id: '{{get-ci.sys_id}}'
          attributes: cpu_usage:{{get-dd-metrics.cpu_pct}},memory_usage:{{get-dd-metrics.mem_pct}}
  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: get-host-metrics
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: cmdb-items
      path: /table/cmdb_ci
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-ci
        method: GET
    - name: cmdb-update
      path: /table/cmdb_ci/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-ci
        method: PATCH
Open in Framework → View in Fleet → servicenow-datadog-metric-to-ci-enrichment.yml

Retrieves network device details from the CMDB by name, returning device type, firmware version, and management IP.

naftiko: '0.5'
info:
  label: ServiceNow Network Device Lookup
  description: Retrieves network device details from the CMDB by name, returning device type, firmware version, and management IP.
  tags:
  - itsm
  - cmdb
  - servicenow
  - networking
capability:
  exposes:
  - type: mcp
    namespace: snow-network
    port: 8080
    tools:
    - name: get-network-device
      description: Given a network device name, return its type, firmware version, management IP, and operational status.
      inputParameters:
      - name: device_name
        in: body
        type: string
        description: Name of the network device.
      call: servicenow.get-network-device
      with:
        name: '{{device_name}}'
      outputParameters:
      - name: device_type
        type: string
        mapping: $.result[0].sys_class_name.display_value
      - name: firmware
        type: string
        mapping: $.result[0].firmware_version
      - name: management_ip
        type: string
        mapping: $.result[0].ip_address
      - name: status
        type: string
        mapping: $.result[0].operational_status.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: network-devices
      path: /table/cmdb_ci_netgear
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-network-device
        method: GET
Open in Framework → View in Fleet → servicenow-network-device-lookup.yml

Retrieves software installation records by product name, returning installed version, host, and compliance status.

naftiko: '0.5'
info:
  label: ServiceNow Software Install Lookup
  description: Retrieves software installation records by product name, returning installed version, host, and compliance status.
  tags:
  - itsm
  - software-asset
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-sw
    port: 8080
    tools:
    - name: get-software-installs
      description: Given a software product name, return installations with version, host, and compliance status.
      inputParameters:
      - name: software_name
        in: body
        type: string
        description: Software product name.
      call: servicenow.get-installs
      with:
        display_name: '{{software_name}}'
      outputParameters:
      - name: version
        type: string
        mapping: $.result[0].version
      - name: host
        type: string
        mapping: $.result[0].installed_on.display_value
      - name: install_date
        type: string
        mapping: $.result[0].install_date
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: software-installs
      path: /table/cmdb_sam_sw_install
      inputParameters:
      - name: display_name
        in: query
      operations:
      - name: get-installs
        method: GET
Open in Framework → View in Fleet → servicenow-software-install-lookup.yml

Checks for scheduling conflicts between change requests targeting the same CIs, flags overlaps, and notifies the change manager via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Change Conflict Detector
  description: Checks for scheduling conflicts between change requests targeting the same CIs, flags overlaps, and notifies the change manager via Slack.
  tags:
  - itsm
  - change-management
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: change-conflict
    port: 8080
    tools:
    - name: detect-change-conflicts
      description: Given a change request number, check for overlapping changes on the same CIs and alert the change manager.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: ServiceNow change request number.
      steps:
      - name: get-change
        type: call
        call: servicenow.get-change
        with:
          number: '{{change_number}}'
      - name: check-conflicts
        type: call
        call: servicenow.query-changes
        with:
          sysparm_query: stateINscheduled,implement^cmdb_ci={{get-change.cmdb_ci}}^number!=={{change_number}}
      - name: notify-change-manager
        type: call
        call: slack.post-message
        with:
          channel: change-management
          text: 'Change Conflict Alert: {{change_number}} has {{check-conflicts.result_count}} overlapping changes on the same CI. Review before approval.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: change-requests
      path: /table/change_request
      inputParameters:
      - name: number
        in: query
      - name: sysparm_query
        in: query
      operations:
      - name: get-change
        method: GET
      - name: query-changes
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-conflict-detector.yml

Reads open incident descriptions from ServiceNow, runs sentiment analysis via Anthropic Claude, and flags negative-sentiment incidents for priority review.

naftiko: '0.5'
info:
  label: ServiceNow Incident Sentiment Analysis
  description: Reads open incident descriptions from ServiceNow, runs sentiment analysis via Anthropic Claude, and flags negative-sentiment incidents for priority review.
  tags:
  - itsm
  - ai
  - servicenow
  - anthropic
  - triage
capability:
  exposes:
  - type: mcp
    namespace: incident-ai
    port: 8080
    tools:
    - name: analyze-incident-sentiment
      description: Given a ServiceNow incident number, extract the description, use Anthropic Claude to assess customer sentiment, and update the incident with a sentiment tag for triage prioritization.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number to analyze, e.g. INC0012345.
      steps:
      - name: get-incident
        type: call
        call: snow-ai.get-incident
        with:
          number: '{{incident_number}}'
      - name: analyze-sentiment
        type: call
        call: anthropic.analyze-sentiment
        with:
          text: '{{get-incident.description}}'
      - name: update-incident
        type: call
        call: snow-ai.update-incident
        with:
          sysId: '{{get-incident.sys_id}}'
          sentiment: '{{analyze-sentiment.sentiment}}'
          sentimentScore: '{{analyze-sentiment.score}}'
  consumes:
  - type: http
    namespace: snow-ai
    baseUri: https://servicenow.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
    - name: incident-updates
      path: /table/incident/{{sysId}}
      inputParameters:
      - name: sysId
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - 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: analyze-sentiment
        method: POST
Open in Framework → View in Fleet → servicenow-incident-sentiment-analysis.yml

Queries ServiceNow for servers with overdue patches, cross-references with Datadog host inventory, and creates Jira tasks for the infrastructure team to remediate.

naftiko: '0.5'
info:
  label: ServiceNow Patch Compliance Check
  description: Queries ServiceNow for servers with overdue patches, cross-references with Datadog host inventory, and creates Jira tasks for the infrastructure team to remediate.
  tags:
  - security
  - compliance
  - servicenow
  - datadog
  - jira
  - patch-management
capability:
  exposes:
  - type: mcp
    namespace: patch-compliance
    port: 8080
    tools:
    - name: check-patch-compliance
      description: Fetch overdue patch records from ServiceNow, validate host status in Datadog, and create Jira remediation tasks for each non-compliant host.
      inputParameters:
      - name: days_overdue
        in: body
        type: integer
        description: Minimum days overdue to flag a host as non-compliant.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for remediation tasks.
      steps:
      - name: get-overdue-patches
        type: call
        call: snow-patch.get-overdue-patches
        with:
          daysOverdue: '{{days_overdue}}'
      - name: validate-host-status
        type: call
        call: datadog-patch.get-host-metrics
        with:
          hostName: '{{get-overdue-patches.hostname}}'
      - name: create-remediation-task
        type: call
        call: jira-patch.create-issue
        with:
          project_key: '{{jira_project_key}}'
          issuetype: Task
          summary: Patch overdue on {{get-overdue-patches.hostname}}
          description: 'Host: {{get-overdue-patches.hostname}}

            Patch: {{get-overdue-patches.patchName}}

            Days overdue: {{days_overdue}}

            Datadog status: {{validate-host-status.status}}'
  consumes:
  - type: http
    namespace: snow-patch
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: patch-records
      path: /table/sn_vul_vulnerable_item
      inputParameters:
      - name: daysOverdue
        in: query
      operations:
      - name: get-overdue-patches
        method: GET
  - type: http
    namespace: datadog-patch
    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: hostName
        in: query
      operations:
      - name: get-host-metrics
        method: GET
  - type: http
    namespace: jira-patch
    baseUri: https://servicenow.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
Open in Framework → View in Fleet → servicenow-patch-compliance-check.yml

Pulls employee role data from Okta, cross-references with ServiceNow access records, identifies orphaned accounts, and creates remediation tasks.

naftiko: '0.5'
info:
  label: ServiceNow Employee Access Review
  description: Pulls employee role data from Okta, cross-references with ServiceNow access records, identifies orphaned accounts, and creates remediation tasks.
  tags:
  - itsm
  - identity-management
  - servicenow
  - okta
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: review-employee-access
      description: Given a department name, pull Okta users, compare with ServiceNow access records, and create tasks for orphaned accounts.
      inputParameters:
      - name: department
        in: body
        type: string
        description: Department name to audit.
      steps:
      - name: get-okta-users
        type: call
        call: okta.list-users
        with:
          filter: profile.department eq "{{department}}"
      - name: get-snow-access
        type: call
        call: servicenow.query-access
        with:
          sysparm_query: department={{department}}
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Access review: {{department}} — {{get-okta-users.count}} Okta users vs {{get-snow-access.result_count}} ServiceNow records'
          assignment_group: identity-governance
  consumes:
  - type: http
    namespace: okta
    baseUri: https://servicenow.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users
      inputParameters:
      - name: filter
        in: query
      operations:
      - name: list-users
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: access-records
      path: /table/sys_user_has_role
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-access
        method: GET
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → servicenow-employee-access-review.yml

Queries ServiceNow for vendor contracts expiring within a specified window, creates renewal tasks, and alerts procurement via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Vendor Contract Expiry Alert
  description: Queries ServiceNow for vendor contracts expiring within a specified window, creates renewal tasks, and alerts procurement via Slack.
  tags:
  - itsm
  - vendor-management
  - servicenow
  - slack
  - procurement
capability:
  exposes:
  - type: mcp
    namespace: contract-expiry
    port: 8080
    tools:
    - name: alert-expiring-contracts
      description: Query for vendor contracts expiring within a given number of days, create renewal tasks, and notify procurement.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: string
        description: Number of days before expiry to flag contracts.
      steps:
      - name: query-expiring-contracts
        type: call
        call: servicenow.query-contracts
        with:
          sysparm_query: endsRELATIVELT@dayofweek@ahead@{{days_until_expiry}}
      - name: create-renewal-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Contract renewal: {{query-expiring-contracts.result_count}} contracts expiring within {{days_until_expiry}} days'
          assignment_group: procurement
      - name: notify-procurement
        type: call
        call: slack.post-message
        with:
          channel: procurement
          text: 'Contract Expiry Alert: {{query-expiring-contracts.result_count}} vendor contracts expiring within {{days_until_expiry}} days. Renewal task: {{create-renewal-task.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: contracts
      path: /table/ast_contract
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-contracts
        method: GET
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-vendor-contract-expiry-alert.yml

Creates a ServiceNow change request for a proposed infrastructure change, assigns approvers from Workday, and posts a review link to Microsoft Teams.

naftiko: '0.5'
info:
  label: Change Request Approval Workflow
  description: Creates a ServiceNow change request for a proposed infrastructure change, assigns approvers from Workday, and posts a review link to Microsoft Teams.
  tags:
  - itsm
  - change-management
  - servicenow
  - workday
  - microsoft-teams
  - approval
capability:
  exposes:
  - type: mcp
    namespace: change-ops
    port: 8080
    tools:
    - name: create-change-request
      description: Create a ServiceNow change request with risk assessment, look up the approval group from Workday, and notify approvers in Microsoft Teams.
      inputParameters:
      - name: change_title
        in: body
        type: string
        description: Short description of the proposed change.
      - name: risk_level
        in: body
        type: string
        description: 'Risk level: low, medium, or high.'
      - name: implementation_date
        in: body
        type: string
        description: Planned implementation date in ISO 8601 format.
      - name: approver_employee_id
        in: body
        type: string
        description: Workday employee ID of the change approver.
      steps:
      - name: get-approver
        type: call
        call: workday.get-worker
        with:
          workerId: '{{approver_employee_id}}'
      - name: create-cr
        type: call
        call: snow-change.create-change-request
        with:
          short_description: '{{change_title}}'
          risk: '{{risk_level}}'
          start_date: '{{implementation_date}}'
          assigned_to: '{{get-approver.userName}}'
      - name: notify-approver
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-approver.workEmail}}'
          text: 'Change request {{create-cr.number}} requires your approval. Risk: {{risk_level}}. Planned: {{implementation_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: workers
      path: /workers/{{workerId}}
      inputParameters:
      - name: workerId
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: snow-change
    baseUri: https://servicenow.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: messages
      path: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → change-request-approval-workflow.yml

Retrieves server details from the CMDB by hostname, returning OS, IP address, location, and operational status.

naftiko: '0.5'
info:
  label: ServiceNow CMDB Server Lookup
  description: Retrieves server details from the CMDB by hostname, returning OS, IP address, location, and operational status.
  tags:
  - itsm
  - cmdb
  - servicenow
  - infrastructure
capability:
  exposes:
  - type: mcp
    namespace: snow-server
    port: 8080
    tools:
    - name: get-server
      description: Given a hostname, return the server's OS, IP address, location, and operational status from the CMDB.
      inputParameters:
      - name: hostname
        in: body
        type: string
        description: Server hostname to look up.
      call: servicenow.get-server
      with:
        name: '{{hostname}}'
      outputParameters:
      - name: ip_address
        type: string
        mapping: $.result[0].ip_address
      - name: os
        type: string
        mapping: $.result[0].os.display_value
      - name: location
        type: string
        mapping: $.result[0].location.display_value
      - name: status
        type: string
        mapping: $.result[0].operational_status.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: servers
      path: /table/cmdb_ci_server
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-server
        method: GET
Open in Framework → View in Fleet → servicenow-cmdb-server-lookup.yml

When a Snowflake pipeline fails, creates a ServiceNow incident, correlates with affected downstream reports, and notifies the data engineering team.

naftiko: '0.5'
info:
  label: ServiceNow Snowflake Data Incident Correlator
  description: When a Snowflake pipeline fails, creates a ServiceNow incident, correlates with affected downstream reports, and notifies the data engineering team.
  tags:
  - itsm
  - data-engineering
  - servicenow
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-incident
    port: 8080
    tools:
    - name: create-data-incident
      description: Given a Snowflake task failure, create a ServiceNow incident with pipeline context and alert the data team.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: Snowflake task name that failed.
      - name: error_message
        in: body
        type: string
        description: Error message from the failed task.
      steps:
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Snowflake pipeline failure: {{task_name}}'
          category: data-platform
          urgency: '2'
          description: 'Task: {{task_name}}

            Error: {{error_message}}'
      - name: notify-data-team
        type: call
        call: slack.post-message
        with:
          channel: data-engineering
          text: 'Snowflake pipeline {{task_name}} failed. Incident: {{create-incident.number}} | Error: {{error_message}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-snowflake-data-incident-correlator.yml

Retrieves details for a ServiceNow assignment group by name, returning manager, member count, and active status.

naftiko: '0.5'
info:
  label: ServiceNow Assignment Group Lookup
  description: Retrieves details for a ServiceNow assignment group by name, returning manager, member count, and active status.
  tags:
  - itsm
  - team-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-groups
    port: 8080
    tools:
    - name: get-assignment-group
      description: Given an assignment group name, return the group manager, member count, and whether the group is active.
      inputParameters:
      - name: group_name
        in: body
        type: string
        description: Name of the ServiceNow assignment group.
      call: servicenow.get-group
      with:
        name: '{{group_name}}'
      outputParameters:
      - name: sys_id
        type: string
        mapping: $.result[0].sys_id
      - name: manager
        type: string
        mapping: $.result[0].manager.display_value
      - name: active
        type: string
        mapping: $.result[0].active
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: groups
      path: /table/sys_user_group
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-group
        method: GET
Open in Framework → View in Fleet → servicenow-assignment-group-lookup.yml

When a critical Jira bug is created in an engineering project, creates a linked ServiceNow incident and posts a cross-team alert to a Slack channel.

naftiko: '0.5'
info:
  label: Jira Bug to ServiceNow Incident Sync
  description: When a critical Jira bug is created in an engineering project, creates a linked ServiceNow incident and posts a cross-team alert to a Slack channel.
  tags:
  - devops
  - itsm
  - jira
  - servicenow
  - slack
  - incident-response
capability:
  exposes:
  - type: mcp
    namespace: eng-itsm-sync
    port: 8080
    tools:
    - name: sync-jira-bug-to-incident
      description: Given a Jira issue key for a critical bug, fetch the issue details, create a corresponding ServiceNow incident, and notify the engineering alert Slack channel.
      inputParameters:
      - name: jira_issue_key
        in: body
        type: string
        description: Jira issue key, e.g. ENG-4521.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel to notify of the new incident.
      steps:
      - name: get-jira-issue
        type: call
        call: jira.get-issue
        with:
          issueKey: '{{jira_issue_key}}'
      - name: create-incident
        type: call
        call: snow-sync.create-incident
        with:
          short_description: 'Jira {{jira_issue_key}}: {{get-jira-issue.summary}}'
          urgency: '1'
          impact: '1'
          description: '{{get-jira-issue.description}}


            Jira link: {{get-jira-issue.url}}'
      - name: notify-slack
        type: call
        call: slack-eng.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Critical bug synced to ServiceNow. Jira: {{jira_issue_key}} | Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://servicenow.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: issues
      path: /issue/{{issueKey}}
      inputParameters:
      - name: issueKey
        in: path
      operations:
      - name: get-issue
        method: GET
  - type: http
    namespace: snow-sync
    baseUri: https://servicenow.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: slack-eng
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → jira-bug-to-servicenow-incident-sync.yml

Retrieves database CI details from the CMDB by name, returning type, version, hosting server, and capacity.

naftiko: '0.5'
info:
  label: ServiceNow Database Lookup
  description: Retrieves database CI details from the CMDB by name, returning type, version, hosting server, and capacity.
  tags:
  - itsm
  - cmdb
  - servicenow
  - database
capability:
  exposes:
  - type: mcp
    namespace: snow-db
    port: 8080
    tools:
    - name: get-database-ci
      description: Given a database name, return its type, version, hosting server, and storage capacity.
      inputParameters:
      - name: db_name
        in: body
        type: string
        description: Database name to look up.
      call: servicenow.get-database
      with:
        name: '{{db_name}}'
      outputParameters:
      - name: type
        type: string
        mapping: $.result[0].type.display_value
      - name: version
        type: string
        mapping: $.result[0].version
      - name: hosting_server
        type: string
        mapping: $.result[0].host.display_value
      - name: capacity_gb
        type: string
        mapping: $.result[0].disk_space
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: databases
      path: /table/cmdb_ci_database
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-database
        method: GET
Open in Framework → View in Fleet → servicenow-database-lookup.yml

Analyzes incident trends over a period, identifies top categories and assignment groups, and posts a trend report to Slack.

naftiko: '0.5'
info:
  label: ServiceNow Incident Trend Analysis
  description: Analyzes incident trends over a period, identifies top categories and assignment groups, and posts a trend report to Slack.
  tags:
  - itsm
  - analytics
  - servicenow
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: incident-trends
    port: 8080
    tools:
    - name: analyze-incident-trends
      description: Query incidents for a given period, aggregate by category, and post a trend analysis to Slack.
      inputParameters:
      - name: days
        in: body
        type: string
        description: Number of days to analyze.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the trend report.
      steps:
      - name: query-incidents
        type: call
        call: servicenow.query-incidents
        with:
          sysparm_query: opened_atRELATIVEGE@day@ago@{{days}}
      - name: post-trends
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Incident Trend Report ({{days}} days): {{query-incidents.result_count}} total incidents | Top category: {{query-incidents.top_category}} | Top group: {{query-incidents.top_group}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-incidents
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-trend-analysis.yml

Retrieves the service map for an application service, returning dependent CIs, hosting infrastructure, and connection details.

naftiko: '0.5'
info:
  label: ServiceNow Service Map Lookup
  description: Retrieves the service map for an application service, returning dependent CIs, hosting infrastructure, and connection details.
  tags:
  - itsm
  - cmdb
  - servicenow
  - service-mapping
capability:
  exposes:
  - type: mcp
    namespace: snow-svcmap
    port: 8080
    tools:
    - name: get-service-map
      description: Given an application service name, return the service map including dependent CIs and infrastructure details.
      inputParameters:
      - name: service_name
        in: body
        type: string
        description: Name of the application service.
      call: servicenow.get-service-map
      with:
        name: '{{service_name}}'
      outputParameters:
      - name: sys_id
        type: string
        mapping: $.result[0].sys_id
      - name: ci_count
        type: string
        mapping: $.result[0].ci_count
      - name: hosting_server
        type: string
        mapping: $.result[0].hosting_server.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: app-services
      path: /table/cmdb_ci_service
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-service-map
        method: GET
Open in Framework → View in Fleet → servicenow-service-map-lookup.yml

When an employee is terminated in Workday, disables their Okta account, revokes ServiceNow access, and creates an audit trail task.

naftiko: '0.5'
info:
  label: ServiceNow Workday Termination to Access Revoke
  description: When an employee is terminated in Workday, disables their Okta account, revokes ServiceNow access, and creates an audit trail task.
  tags:
  - itsm
  - offboarding
  - servicenow
  - workday
  - okta
  - slack
capability:
  exposes:
  - type: mcp
    namespace: term-revoke
    port: 8080
    tools:
    - name: revoke-terminated-access
      description: Given a Workday worker ID for a terminated employee, disable Okta account, deactivate ServiceNow user, and create an audit task.
      inputParameters:
      - name: worker_id
        in: body
        type: string
        description: Workday worker ID of the terminated employee.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{worker_id}}'
      - name: disable-okta
        type: call
        call: okta.deactivate-user
        with:
          user_id: '{{get-worker.email}}'
      - name: deactivate-snow-user
        type: call
        call: servicenow.update-user
        with:
          user_name: '{{get-worker.email}}'
          active: 'false'
      - name: create-audit-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Termination access revocation: {{get-worker.full_name}}'
          assignment_group: identity-governance
          description: 'Employee: {{get-worker.full_name}} | Okta: disabled | ServiceNow: deactivated'
      - name: notify-security
        type: call
        call: slack.post-message
        with:
          channel: secops
          text: 'Termination processed: {{get-worker.full_name}} — Okta disabled, SNOW deactivated. Audit task: {{create-audit-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: /servicenow/workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: okta
    baseUri: https://servicenow.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{user_id}}/lifecycle/deactivate
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: users
      path: /table/sys_user
      inputParameters:
      - name: user_name
        in: query
      operations:
      - name: update-user
        method: PATCH
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-workday-termination-to-access-revoke.yml

Retrieves the status of a service catalog request item by number, returning state, approvals, and estimated delivery date.

naftiko: '0.5'
info:
  label: ServiceNow Request Item Status Lookup
  description: Retrieves the status of a service catalog request item by number, returning state, approvals, and estimated delivery date.
  tags:
  - itsm
  - service-catalog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-ritm
    port: 8080
    tools:
    - name: get-request-item-status
      description: Given a request item number, return its current state, approval status, and estimated delivery date.
      inputParameters:
      - name: ritm_number
        in: body
        type: string
        description: ServiceNow request item number, e.g. RITM0012345.
      call: servicenow.get-ritm
      with:
        number: '{{ritm_number}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.result[0].state.display_value
      - name: approval
        type: string
        mapping: $.result[0].approval.display_value
      - name: due_date
        type: string
        mapping: $.result[0].due_date
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: request-items
      path: /table/sc_req_item
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-ritm
        method: GET
Open in Framework → View in Fleet → servicenow-request-item-status-lookup.yml

Processes a VPN access request, verifies user identity in Okta, provisions VPN profile, closes the ServiceNow request, and notifies the user.

naftiko: '0.5'
info:
  label: ServiceNow VPN Access Request Workflow
  description: Processes a VPN access request, verifies user identity in Okta, provisions VPN profile, closes the ServiceNow request, and notifies the user.
  tags:
  - itsm
  - access-management
  - servicenow
  - okta
  - slack
capability:
  exposes:
  - type: mcp
    namespace: vpn-access
    port: 8080
    tools:
    - name: process-vpn-request
      description: Given a request item number, verify the user in Okta, provision VPN access, close the request, and notify via Slack.
      inputParameters:
      - name: ritm_number
        in: body
        type: string
        description: ServiceNow request item number.
      steps:
      - name: get-request
        type: call
        call: servicenow.get-ritm
        with:
          number: '{{ritm_number}}'
      - name: verify-user
        type: call
        call: okta.get-user
        with:
          id: '{{get-request.requested_for_email}}'
      - name: close-request
        type: call
        call: servicenow.update-ritm
        with:
          sys_id: '{{get-request.sys_id}}'
          state: closed_complete
          close_notes: VPN access provisioned for {{verify-user.profile.email}}
      - name: notify-user
        type: call
        call: slack.post-message
        with:
          channel: '{{get-request.requested_for_slack_id}}'
          text: Your VPN access request {{ritm_number}} has been fulfilled. Follow setup instructions at https://wiki.servicenow.com/vpn-setup
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: request-items
      path: /table/sc_req_item
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-ritm
        method: GET
    - name: ritm-update
      path: /table/sc_req_item/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-ritm
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://servicenow.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_api_token
    resources:
    - name: users
      path: /users/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: get-user
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-vpn-access-request-workflow.yml

When a GitHub pull request is merged to main, creates a ServiceNow change request for tracking and posts the linkage to Slack.

naftiko: '0.5'
info:
  label: ServiceNow GitHub PR to Change Request
  description: When a GitHub pull request is merged to main, creates a ServiceNow change request for tracking and posts the linkage to Slack.
  tags:
  - itsm
  - change-management
  - servicenow
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pr-to-change
    port: 8080
    tools:
    - name: create-change-from-pr
      description: Given a GitHub repository and PR number, fetch PR details, create a ServiceNow change request, and post linkage to Slack.
      inputParameters:
      - name: repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: pr_number
        in: body
        type: string
        description: Pull request number.
      steps:
      - name: get-pr
        type: call
        call: github.get-pull-request
        with:
          repo: '{{repo}}'
          pull_number: '{{pr_number}}'
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Deploy: {{get-pr.title}}'
          type: normal
          description: 'PR: {{repo}}#{{pr_number}}

            Author: {{get-pr.user}}

            Merged: {{get-pr.merged_at}}


            {{get-pr.body}}'
      - name: post-link
        type: call
        call: slack.post-message
        with:
          channel: deployments
          text: 'Change {{create-change.number}} created from PR {{repo}}#{{pr_number}}: {{get-pr.title}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: pulls
      path: /repos/{{repo}}/pulls/{{pull_number}}
      inputParameters:
      - name: repo
        in: path
      - name: pull_number
        in: path
      operations:
      - name: get-pull-request
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-github-pr-to-change-request.yml

Aggregates service health from ServiceNow and Datadog, compiles a unified dashboard digest, and posts to Slack.

naftiko: '0.5'
info:
  label: ServiceNow Service Health Dashboard
  description: Aggregates service health from ServiceNow and Datadog, compiles a unified dashboard digest, and posts to Slack.
  tags:
  - itsm
  - observability
  - servicenow
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: svc-health
    port: 8080
    tools:
    - name: generate-health-dashboard
      description: Aggregate open incidents per service from ServiceNow and Datadog monitor states, then post a unified health summary to Slack.
      inputParameters:
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for the dashboard digest.
      steps:
      - name: get-snow-health
        type: call
        call: servicenow.query-incidents
        with:
          sysparm_query: stateINnew,in_progress^priority<=2
      - name: get-dd-monitors
        type: call
        call: datadog.get-monitors
        with:
          monitor_tags: env:production
      - name: post-dashboard
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Service Health Dashboard: SNOW P1/P2 incidents: {{get-snow-health.result_count}} | DD alerting monitors: {{get-dd-monitors.alert_count}} | Review: https://servicenow.service-now.com/dashboards'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-incidents
        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: monitors
      path: /monitor
      inputParameters:
      - name: monitor_tags
        in: query
      operations:
      - name: get-monitors
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-service-health-dashboard.yml

Retrieves a change request record by number, returning type, risk, state, and planned dates.

naftiko: '0.5'
info:
  label: ServiceNow Change Request Lookup
  description: Retrieves a change request record by number, returning type, risk, state, and planned dates.
  tags:
  - itsm
  - change-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-change
    port: 8080
    tools:
    - name: get-change-request
      description: Given a change request number, return the change type, risk level, current state, and planned start/end dates.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: ServiceNow change request number, e.g. CHG0012345.
      call: servicenow.get-change
      with:
        number: '{{change_number}}'
      outputParameters:
      - name: sys_id
        type: string
        mapping: $.result[0].sys_id
      - name: type
        type: string
        mapping: $.result[0].type.display_value
      - name: risk
        type: string
        mapping: $.result[0].risk.display_value
      - name: state
        type: string
        mapping: $.result[0].state.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: change-requests
      path: /table/change_request
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-change
        method: GET
Open in Framework → View in Fleet → servicenow-change-request-lookup.yml

Detects incidents approaching SLA breach, escalates priority, creates a PagerDuty alert, and notifies the service owner via Slack.

naftiko: '0.5'
info:
  label: ServiceNow SLA Violation Escalation
  description: Detects incidents approaching SLA breach, escalates priority, creates a PagerDuty alert, and notifies the service owner via Slack.
  tags:
  - itsm
  - sla
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: sla-escalate
    port: 8080
    tools:
    - name: escalate-sla-violations
      description: Query incidents approaching SLA breach, escalate them, page the on-call, and notify service owners.
      inputParameters:
      - name: breach_threshold_pct
        in: body
        type: string
        description: Percentage of SLA elapsed to trigger escalation (e.g., 80).
      steps:
      - name: query-at-risk
        type: call
        call: servicenow.query-sla-at-risk
        with:
          sysparm_query: percentage>={{breach_threshold_pct}}^has_breached=false
      - name: page-oncall
        type: call
        call: pagerduty.create-incident
        with:
          title: 'SLA at risk: {{query-at-risk.result_count}} incidents approaching breach'
          service_id: $secrets.pagerduty_service_id
          urgency: high
      - name: notify-owners
        type: call
        call: slack.post-message
        with:
          channel: service-owners
          text: 'SLA Escalation: {{query-at-risk.result_count}} incidents at >{{breach_threshold_pct}}% SLA. PagerDuty alert created. Immediate action required.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: sla-tasks
      path: /table/task_sla
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-sla-at-risk
        method: GET
  - 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
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-sla-violation-escalation.yml

Retrieves workspace allocation details from ServiceNow facilities management by floor or building.

naftiko: '0.5'
info:
  label: ServiceNow Workspace Lookup
  description: Retrieves workspace allocation details from ServiceNow facilities management by floor or building.
  tags:
  - itsm
  - facilities-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-workspace
    port: 8080
    tools:
    - name: get-workspace
      description: Given a building or floor identifier, return workspace allocation details including capacity and occupancy.
      inputParameters:
      - name: building
        in: body
        type: string
        description: Building name or identifier.
      call: servicenow.get-workspace
      with:
        building: '{{building}}'
      outputParameters:
      - name: total_capacity
        type: string
        mapping: $.result[0].capacity
      - name: occupied
        type: string
        mapping: $.result[0].occupied_count
      - name: available
        type: string
        mapping: $.result[0].available_count
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: workspaces
      path: /table/fm_space
      inputParameters:
      - name: building
        in: query
      operations:
      - name: get-workspace
        method: GET
Open in Framework → View in Fleet → servicenow-workspace-lookup.yml

When a GitHub Dependabot or code scanning alert fires, creates a ServiceNow security incident and posts a notification to the security Slack channel.

naftiko: '0.5'
info:
  label: GitHub Vulnerability Alert to ServiceNow Security Incident
  description: When a GitHub Dependabot or code scanning alert fires, creates a ServiceNow security incident and posts a notification to the security Slack channel.
  tags:
  - security
  - devops
  - github
  - servicenow
  - slack
  - vulnerability
capability:
  exposes:
  - type: mcp
    namespace: security-ops
    port: 8080
    tools:
    - name: create-security-incident-from-github-alert
      description: Given a GitHub repository and vulnerability alert number, fetch the alert details, create a ServiceNow security incident, and notify the security Slack channel.
      inputParameters:
      - name: github_repo
        in: body
        type: string
        description: GitHub repository in owner/repo format.
      - name: alert_number
        in: body
        type: integer
        description: GitHub Dependabot or code scanning alert number.
      - name: security_slack_channel
        in: body
        type: string
        description: Slack channel for the security team notification.
      steps:
      - name: get-alert
        type: call
        call: github.get-dependabot-alert
        with:
          repo: '{{github_repo}}'
          alertNumber: '{{alert_number}}'
      - name: create-sec-incident
        type: call
        call: snow-sec.create-incident
        with:
          short_description: 'Vulnerability: {{get-alert.securityAdvisory.summary}}'
          severity: '{{get-alert.securityAdvisory.severity}}'
          description: 'Repo: {{github_repo}}

            Package: {{get-alert.dependency.package.name}}

            CVSS: {{get-alert.securityAdvisory.cvss_score}}

            Alert: {{alert_number}}'
      - name: notify-security
        type: call
        call: slack-sec.post-message
        with:
          channel: '{{security_slack_channel}}'
          text: 'GitHub vulnerability in {{github_repo}}: {{get-alert.securityAdvisory.summary}} ({{get-alert.securityAdvisory.severity}}) | Incident: {{create-sec-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/{{repo}}/dependabot/alerts/{{alertNumber}}
      inputParameters:
      - name: repo
        in: path
      - name: alertNumber
        in: path
      operations:
      - name: get-dependabot-alert
        method: GET
  - type: http
    namespace: snow-sec
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: security-incidents
      path: /table/sn_si_incident
      operations:
      - name: create-incident
        method: POST
  - type: http
    namespace: slack-sec
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → github-vulnerability-alert-to-servicenow-security-incident.yml

Identifies incidents idle for more than 30 days, adds a reminder comment, and notifies assigned users via Slack to take action or close.

naftiko: '0.5'
info:
  label: ServiceNow Stale Incident Cleanup
  description: Identifies incidents idle for more than 30 days, adds a reminder comment, and notifies assigned users via Slack to take action or close.
  tags:
  - itsm
  - incident-management
  - servicenow
  - slack
  - automation
capability:
  exposes:
  - type: mcp
    namespace: stale-cleanup
    port: 8080
    tools:
    - name: cleanup-stale-incidents
      description: Query for incidents with no activity in a given number of days, add work notes, and notify assignees.
      inputParameters:
      - name: idle_days
        in: body
        type: string
        description: Number of idle days to flag incidents.
      steps:
      - name: query-stale
        type: call
        call: servicenow.query-incidents
        with:
          sysparm_query: stateINin_progress,on_hold^sys_updated_onRELATIVELT@day@ago@{{idle_days}}
      - name: post-reminder
        type: call
        call: slack.post-message
        with:
          channel: service-desk
          text: 'Stale Incident Alert: {{query-stale.result_count}} incidents idle for >{{idle_days}} days. Please update or close them.'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-incidents
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-stale-incident-cleanup.yml

When a major incident is declared, creates a status page update, sends mass notification via email, posts to Slack, and updates the ServiceNow incident timeline.

naftiko: '0.5'
info:
  label: ServiceNow Outage Communication Orchestrator
  description: When a major incident is declared, creates a status page update, sends mass notification via email, posts to Slack, and updates the ServiceNow incident timeline.
  tags:
  - itsm
  - incident-management
  - servicenow
  - slack
  - communications
capability:
  exposes:
  - type: mcp
    namespace: outage-comms
    port: 8080
    tools:
    - name: orchestrate-outage-comms
      description: Given a major incident number, publish status page update, broadcast to Slack, and record communication in the incident work notes.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow major incident number.
      - name: status_message
        in: body
        type: string
        description: Status update message for stakeholders.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: post-slack-broadcast
        type: call
        call: slack.post-message
        with:
          channel: company-status
          text: 'SERVICE ALERT: {{get-incident.short_description}} | Status: {{status_message}} | Tracking: {{incident_number}}'
      - name: update-work-notes
        type: call
        call: servicenow.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          work_notes: 'Outage communication sent: {{status_message}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-outage-communication-orchestrator.yml

After a change is implemented, checks Datadog for anomalies, updates the change record with results, and posts a PIR summary to Slack.

naftiko: '0.5'
info:
  label: ServiceNow Change Post-Implementation Review
  description: After a change is implemented, checks Datadog for anomalies, updates the change record with results, and posts a PIR summary to Slack.
  tags:
  - itsm
  - change-management
  - servicenow
  - datadog
  - slack
capability:
  exposes:
  - type: mcp
    namespace: change-pir
    port: 8080
    tools:
    - name: run-post-implementation-review
      description: Given a change number, verify no anomalies detected in Datadog post-implementation, update the change record, and post PIR to Slack.
      inputParameters:
      - name: change_number
        in: body
        type: string
        description: ServiceNow change request number.
      steps:
      - name: get-change
        type: call
        call: servicenow.get-change
        with:
          number: '{{change_number}}'
      - name: check-anomalies
        type: call
        call: datadog.get-events
        with:
          tags: change:{{change_number}}
          priority: normal
      - name: update-change
        type: call
        call: servicenow.update-change
        with:
          sys_id: '{{get-change.sys_id}}'
          close_notes: 'PIR complete. Anomalies detected: {{check-anomalies.event_count}}'
      - name: post-pir
        type: call
        call: slack.post-message
        with:
          channel: change-management
          text: 'PIR for {{change_number}}: {{get-change.short_description}} | Anomalies: {{check-anomalies.event_count}} | Status: complete'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: change-requests
      path: /table/change_request
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-change
        method: GET
    - name: change-update
      path: /table/change_request/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-change
        method: PATCH
  - 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
      inputParameters:
      - name: tags
        in: query
      - name: priority
        in: query
      operations:
      - name: get-events
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-change-post-implementation-review.yml

Retrieves storage volume details from the CMDB by name, returning capacity, usage, and associated server.

naftiko: '0.5'
info:
  label: ServiceNow Storage Volume Lookup
  description: Retrieves storage volume details from the CMDB by name, returning capacity, usage, and associated server.
  tags:
  - itsm
  - cmdb
  - servicenow
  - storage
capability:
  exposes:
  - type: mcp
    namespace: snow-storage
    port: 8080
    tools:
    - name: get-storage-volume
      description: Given a storage volume name, return its capacity, usage percentage, and associated server.
      inputParameters:
      - name: volume_name
        in: body
        type: string
        description: Storage volume name.
      call: servicenow.get-volume
      with:
        name: '{{volume_name}}'
      outputParameters:
      - name: capacity_gb
        type: string
        mapping: $.result[0].disk_space
      - name: used_pct
        type: string
        mapping: $.result[0].used_percent
      - name: server
        type: string
        mapping: $.result[0].computer.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: volumes
      path: /table/cmdb_ci_storage_volume
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-volume
        method: GET
Open in Framework → View in Fleet → servicenow-storage-volume-lookup.yml

Aggregates IT costs from ServiceNow ITFM by cost center, generates allocation summary, and distributes via Slack to finance leadership.

naftiko: '0.5'
info:
  label: ServiceNow IT Cost Allocation Report
  description: Aggregates IT costs from ServiceNow ITFM by cost center, generates allocation summary, and distributes via Slack to finance leadership.
  tags:
  - itsm
  - financial-management
  - servicenow
  - slack
  - reporting
capability:
  exposes:
  - type: mcp
    namespace: cost-allocation
    port: 8080
    tools:
    - name: generate-cost-allocation-report
      description: Query IT cost data by period, aggregate by cost center, and post allocation summary to Slack.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: Fiscal period, e.g. 2026-Q1.
      steps:
      - name: query-costs
        type: call
        call: servicenow.query-costs
        with:
          sysparm_query: fiscal_period={{fiscal_period}}
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: finance-leadership
          text: 'IT Cost Allocation Report for {{fiscal_period}}: Total spend: {{query-costs.total_cost}} | Top cost center: {{query-costs.top_cost_center}} ({{query-costs.top_cost_amount}})'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: cost-items
      path: /table/fm_ci_cost
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-costs
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-it-cost-allocation-report.yml

Detects expiring OAuth tokens in ServiceNow credential store, rotates them, creates a change record for audit, and notifies the security team.

naftiko: '0.5'
info:
  label: ServiceNow OAuth Token Rotation Workflow
  description: Detects expiring OAuth tokens in ServiceNow credential store, rotates them, creates a change record for audit, and notifies the security team.
  tags:
  - itsm
  - security
  - servicenow
  - slack
  - credential-management
capability:
  exposes:
  - type: mcp
    namespace: token-rotation
    port: 8080
    tools:
    - name: rotate-expiring-tokens
      description: Query for OAuth tokens nearing expiry, initiate rotation, create a change record, and alert security.
      inputParameters:
      - name: days_until_expiry
        in: body
        type: string
        description: Days before expiry to trigger rotation.
      steps:
      - name: query-expiring-tokens
        type: call
        call: servicenow.query-credentials
        with:
          sysparm_query: expiration_dateRELATIVELT@day@ahead@{{days_until_expiry}}^type=oauth
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'OAuth token rotation: {{query-expiring-tokens.result_count}} tokens expiring within {{days_until_expiry}} days'
          type: standard
          assignment_group: security-ops
      - name: notify-security
        type: call
        call: slack.post-message
        with:
          channel: secops
          text: 'Token Rotation: {{query-expiring-tokens.result_count}} OAuth tokens expiring within {{days_until_expiry}} days. Change: {{create-change.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: credentials
      path: /table/oauth_credential
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-credentials
        method: GET
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-oauth-token-rotation-workflow.yml

Converts a ServiceNow incident into a Jira bug ticket with full context, links them bidirectionally, and posts a confirmation to Slack.

naftiko: '0.5'
info:
  label: ServiceNow Incident to Jira Bug
  description: Converts a ServiceNow incident into a Jira bug ticket with full context, links them bidirectionally, and posts a confirmation to Slack.
  tags:
  - itsm
  - incident-management
  - servicenow
  - jira
  - slack
capability:
  exposes:
  - type: mcp
    namespace: incident-to-bug
    port: 8080
    tools:
    - name: create-bug-from-incident
      description: Given a ServiceNow incident number and Jira project key, create a bug ticket in Jira with incident details and post confirmation to Slack.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      - name: project_key
        in: body
        type: string
        description: Jira project key for the bug ticket.
      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:
          project_key: '{{project_key}}'
          issuetype: Bug
          summary: 'SNOW {{incident_number}}: {{get-incident.short_description}}'
          description: 'Priority: {{get-incident.priority}}

            Category: {{get-incident.category}}

            Assigned to: {{get-incident.assigned_to}}'
      - name: post-confirmation
        type: call
        call: slack.post-message
        with:
          channel: engineering
          text: 'Bug created from incident {{incident_number}}: {{create-jira-bug.key}} — {{get-incident.short_description}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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://servicenow-corp.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-to-jira-bug.yml

Orchestrates server decommissioning by updating the CMDB status, revoking DNS entries, creating a change record, and notifying the infrastructure team.

naftiko: '0.5'
info:
  label: ServiceNow Server Decommission Workflow
  description: Orchestrates server decommissioning by updating the CMDB status, revoking DNS entries, creating a change record, and notifying the infrastructure team.
  tags:
  - itsm
  - cmdb
  - servicenow
  - infrastructure
  - slack
capability:
  exposes:
  - type: mcp
    namespace: server-decommission
    port: 8080
    tools:
    - name: decommission-server
      description: Given a CI name, update its CMDB status to retired, create a change record for tracking, and notify the infra team.
      inputParameters:
      - name: ci_name
        in: body
        type: string
        description: Configuration item name of the server to decommission.
      - name: reason
        in: body
        type: string
        description: Reason for decommissioning.
      steps:
      - name: get-ci
        type: call
        call: servicenow.get-ci
        with:
          name: '{{ci_name}}'
      - name: update-ci-status
        type: call
        call: servicenow.update-ci
        with:
          sys_id: '{{get-ci.sys_id}}'
          install_status: retired
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Server decommission: {{ci_name}}'
          description: 'Reason: {{reason}}

            CI: {{ci_name}}

            Class: {{get-ci.sys_class_name}}'
          type: standard
      - name: notify-infra
        type: call
        call: slack.post-message
        with:
          channel: infrastructure
          text: 'Server {{ci_name}} decommissioned. Change: {{create-change.number}} | Reason: {{reason}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: cmdb-items
      path: /table/cmdb_ci
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-ci
        method: GET
    - name: cmdb-update
      path: /table/cmdb_ci/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-ci
        method: PATCH
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-server-decommission-workflow.yml

Links a child incident to a parent major incident, updates both records, and notifies the incident commander via Slack.

naftiko: '0.5'
info:
  label: ServiceNow Incident Parent-Child Link
  description: Links a child incident to a parent major incident, updates both records, and notifies the incident commander via Slack.
  tags:
  - itsm
  - incident-management
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: incident-link
    port: 8080
    tools:
    - name: link-child-incident
      description: Given a child incident and parent major incident number, link them and notify the incident commander.
      inputParameters:
      - name: child_number
        in: body
        type: string
        description: Child incident number.
      - name: parent_number
        in: body
        type: string
        description: Parent major incident number.
      steps:
      - name: get-parent
        type: call
        call: servicenow.get-incident
        with:
          number: '{{parent_number}}'
      - name: update-child
        type: call
        call: servicenow.update-incident
        with:
          number: '{{child_number}}'
          parent_incident: '{{get-parent.sys_id}}'
      - name: notify-commander
        type: call
        call: slack.post-message
        with:
          channel: major-incidents
          text: Child incident {{child_number}} linked to major incident {{parent_number}} — {{get-parent.short_description}}
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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
      - name: update-incident
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-incident-parent-child-link.yml

Generates a ServiceNow report on open incidents by priority, exports it, and distributes via email and Slack to leadership.

naftiko: '0.5'
info:
  label: ServiceNow Scheduled Report Distribution
  description: Generates a ServiceNow report on open incidents by priority, exports it, and distributes via email and Slack to leadership.
  tags:
  - itsm
  - reporting
  - servicenow
  - slack
  - automation
capability:
  exposes:
  - type: mcp
    namespace: report-dist
    port: 8080
    tools:
    - name: distribute-incident-report
      description: Generate an open incidents report, post summary to Slack, and email the full report to the distribution list.
      inputParameters:
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for report summary.
      steps:
      - name: query-open-incidents
        type: call
        call: servicenow.query-incidents
        with:
          sysparm_query: stateINnew,in_progress,on_hold
      - name: post-summary
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Weekly Incident Report: {{query-open-incidents.result_count}} open incidents. P1: {{query-open-incidents.p1_count}} | P2: {{query-open-incidents.p2_count}} | P3: {{query-open-incidents.p3_count}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-incidents
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-scheduled-report-distribution.yml

Retrieves upstream and downstream CI relationships for a given configuration item in the ServiceNow CMDB.

naftiko: '0.5'
info:
  label: ServiceNow CMDB Relationship Lookup
  description: Retrieves upstream and downstream CI relationships for a given configuration item in the ServiceNow CMDB.
  tags:
  - itsm
  - cmdb
  - servicenow
  - dependency-mapping
capability:
  exposes:
  - type: mcp
    namespace: snow-cmdb-rel
    port: 8080
    tools:
    - name: get-ci-relationships
      description: Given a CI sys_id, return its upstream and downstream relationships including type and related CI names.
      inputParameters:
      - name: ci_sys_id
        in: body
        type: string
        description: The sys_id of the configuration item.
      call: servicenow.get-relationships
      with:
        parent: '{{ci_sys_id}}'
      outputParameters:
      - name: relationship_type
        type: string
        mapping: $.result[0].type.display_value
      - name: child_ci
        type: string
        mapping: $.result[0].child.display_value
      - name: parent_ci
        type: string
        mapping: $.result[0].parent.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: cmdb-relationships
      path: /table/cmdb_rel_ci
      inputParameters:
      - name: parent
        in: query
      operations:
      - name: get-relationships
        method: GET
Open in Framework → View in Fleet → servicenow-cmdb-relationship-lookup.yml

When an employee termination is recorded in Workday, creates a ServiceNow offboarding task, revokes their Okta access, and confirms via Slack.

naftiko: '0.5'
info:
  label: Workday Offboarding to ServiceNow Access Revocation
  description: When an employee termination is recorded in Workday, creates a ServiceNow offboarding task, revokes their Okta access, and confirms via Slack.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - okta
  - slack
  - identity
capability:
  exposes:
  - type: mcp
    namespace: offboarding-hr
    port: 8080
    tools:
    - name: trigger-offboarding
      description: Given a Workday employee ID and their Okta user ID, confirm termination in Workday, create a ServiceNow offboarding task, deactivate Okta, and post a confirmation to Slack.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: Workday worker ID for the departing employee.
      - name: okta_user_id
        in: body
        type: string
        description: Okta user ID to deactivate.
      - name: hr_slack_channel
        in: body
        type: string
        description: Slack channel for HR offboarding confirmation.
      steps:
      - name: get-employee
        type: call
        call: workday-off.get-worker
        with:
          workerId: '{{workday_employee_id}}'
      - name: create-offboarding-task
        type: call
        call: snow-off.create-ticket
        with:
          short_description: 'Employee offboarding: {{get-employee.displayName}}'
          category: hr_offboarding
          assignment_group: IT_Offboarding
      - name: deactivate-okta
        type: call
        call: okta.deactivate-user
        with:
          userId: '{{okta_user_id}}'
      - name: confirm-slack
        type: call
        call: slack-hr.post-message
        with:
          channel: '{{hr_slack_channel}}'
          text: 'Offboarding initiated for {{get-employee.displayName}}. ServiceNow task: {{create-offboarding-task.number}}. Okta access revoked.'
  consumes:
  - type: http
    namespace: workday-off
    baseUri: https://wd2-impl-services1.workday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: workers
      path: /workers/{{workerId}}
      inputParameters:
      - name: workerId
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: snow-off
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: tasks
      path: /table/sc_task
      operations:
      - name: create-ticket
        method: POST
  - type: http
    namespace: okta
    baseUri: https://servicenow.okta.com/api/v1
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.okta_token
      placement: header
    resources:
    - name: user-lifecycle
      path: /users/{{userId}}/lifecycle/deactivate
      inputParameters:
      - name: userId
        in: path
      operations:
      - name: deactivate-user
        method: POST
  - type: http
    namespace: slack-hr
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → workday-offboarding-to-servicenow-access-revocation.yml

Retrieves location details by name, returning address, timezone, and parent location.

naftiko: '0.5'
info:
  label: ServiceNow Location Lookup
  description: Retrieves location details by name, returning address, timezone, and parent location.
  tags:
  - itsm
  - location-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-location
    port: 8080
    tools:
    - name: get-location
      description: Given a location name, return its full address, timezone, and parent location.
      inputParameters:
      - name: location_name
        in: body
        type: string
        description: Location name to look up.
      call: servicenow.get-location
      with:
        name: '{{location_name}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.result[0].full_name
      - name: street
        type: string
        mapping: $.result[0].street
      - name: city
        type: string
        mapping: $.result[0].city
      - name: time_zone
        type: string
        mapping: $.result[0].time_zone
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: locations
      path: /table/cmn_location
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-location
        method: GET
Open in Framework → View in Fleet → servicenow-location-lookup.yml

Accepts a structured service request submitted via a Slack slash command, creates a ServiceNow request item, and confirms back to the requester in Slack.

naftiko: '0.5'
info:
  label: ServiceNow Request Intake from Slack
  description: Accepts a structured service request submitted via a Slack slash command, creates a ServiceNow request item, and confirms back to the requester in Slack.
  tags:
  - itsm
  - service-catalog
  - servicenow
  - slack
  - automation
capability:
  exposes:
  - type: mcp
    namespace: slack-intake
    port: 8080
    tools:
    - name: submit-request-from-slack
      description: Given a Slack user ID, request category, and description, create a ServiceNow service catalog request item and post a confirmation with the request number back to the Slack user.
      inputParameters:
      - name: slack_user_id
        in: body
        type: string
        description: Slack user ID of the person submitting the request.
      - name: request_category
        in: body
        type: string
        description: ServiceNow catalog item category, e.g. hardware, software, access.
      - name: request_description
        in: body
        type: string
        description: Short description of what is being requested.
      steps:
      - name: create-request
        type: call
        call: snow-request.create-request
        with:
          short_description: '{{request_description}}'
          category: '{{request_category}}'
          opened_by: '{{slack_user_id}}'
      - name: confirm-slack
        type: call
        call: slack-confirm.post-message
        with:
          channel: '{{slack_user_id}}'
          text: 'Your request has been submitted: {{create-request.number}}. Category: {{request_category}}. We''ll update you as it progresses.'
  consumes:
  - type: http
    namespace: snow-request
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: requests
      path: /table/sc_request
      operations:
      - name: create-request
        method: POST
  - type: http
    namespace: slack-confirm
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-request-intake-from-slack.yml

Monitors Snowflake data pipeline quality metrics and creates a ServiceNow incident when row counts or freshness thresholds are violated.

naftiko: '0.5'
info:
  label: Snowflake Data Quality Alert to ServiceNow
  description: Monitors Snowflake data pipeline quality metrics and creates a ServiceNow incident when row counts or freshness thresholds are violated.
  tags:
  - data
  - analytics
  - snowflake
  - servicenow
  - monitoring
  - data-quality
capability:
  exposes:
  - type: mcp
    namespace: data-quality-ops
    port: 8080
    tools:
    - name: monitor-data-quality
      description: Execute a Snowflake data quality check query and, if thresholds are violated, create a ServiceNow incident and alert the data engineering team in Slack.
      inputParameters:
      - name: quality_check_query
        in: body
        type: string
        description: Snowflake SQL query that returns a quality_score indicating data health.
      - name: threshold
        in: body
        type: number
        description: Minimum acceptable quality score. Below this triggers an incident.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for data quality alerts.
      steps:
      - name: run-quality-check
        type: call
        call: snowflake-dq.execute-query
        with:
          statement: '{{quality_check_query}}'
      - name: create-incident
        type: call
        call: snow-dq.create-incident
        with:
          short_description: 'Data quality below threshold: score {{run-quality-check.quality_score}}'
          urgency: '2'
          description: 'Quality score: {{run-quality-check.quality_score}} (threshold: {{threshold}})

            Failing tables: {{run-quality-check.failing_tables}}'
      - name: alert-data-team
        type: call
        call: slack-dq.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Data quality alert: score {{run-quality-check.quality_score}} below threshold {{threshold}} | Incident: {{create-incident.number}}'
  consumes:
  - type: http
    namespace: snowflake-dq
    baseUri: https://servicenow.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: queries
      path: /statements
      operations:
      - name: execute-query
        method: POST
  - type: http
    namespace: snow-dq
    baseUri: https://servicenow.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: slack-dq
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → snowflake-data-quality-alert-to-servicenow.yml

Retrieves a problem record by number, returning root cause, state, and related incident count.

naftiko: '0.5'
info:
  label: ServiceNow Problem Record Lookup
  description: Retrieves a problem record by number, returning root cause, state, and related incident count.
  tags:
  - itsm
  - problem-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-problem
    port: 8080
    tools:
    - name: get-problem
      description: Given a problem number, return the root cause, current state, priority, and number of related incidents.
      inputParameters:
      - name: problem_number
        in: body
        type: string
        description: ServiceNow problem number, e.g. PRB0012345.
      call: servicenow.get-problem
      with:
        number: '{{problem_number}}'
      outputParameters:
      - name: sys_id
        type: string
        mapping: $.result[0].sys_id
      - name: root_cause
        type: string
        mapping: $.result[0].cause_notes
      - name: state
        type: string
        mapping: $.result[0].state.display_value
      - name: priority
        type: string
        mapping: $.result[0].priority.display_value
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: problems
      path: /table/problem
      inputParameters:
      - name: number
        in: query
      operations:
      - name: get-problem
        method: GET
Open in Framework → View in Fleet → servicenow-problem-record-lookup.yml

Retrieves a service catalog item by name, returning category, price, and availability status.

naftiko: '0.5'
info:
  label: ServiceNow Catalog Item Lookup
  description: Retrieves a service catalog item by name, returning category, price, and availability status.
  tags:
  - itsm
  - service-catalog
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-catalog
    port: 8080
    tools:
    - name: get-catalog-item
      description: Given a catalog item name, return its category, price, availability, and short description.
      inputParameters:
      - name: item_name
        in: body
        type: string
        description: Name of the service catalog item to look up.
      call: servicenow.get-catalog-item
      with:
        name: '{{item_name}}'
      outputParameters:
      - name: sys_id
        type: string
        mapping: $.result[0].sys_id
      - name: category
        type: string
        mapping: $.result[0].category.display_value
      - name: price
        type: string
        mapping: $.result[0].price
      - name: availability
        type: string
        mapping: $.result[0].availability
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: catalog-items
      path: /table/sc_cat_item
      inputParameters:
      - name: name
        in: query
      operations:
      - name: get-catalog-item
        method: GET
Open in Framework → View in Fleet → servicenow-catalog-item-lookup.yml

Analyzes recent incidents for recurring categories without matching knowledge articles, creates KB draft tasks, and alerts the knowledge management team.

naftiko: '0.5'
info:
  label: ServiceNow Knowledge Gap Detector
  description: Analyzes recent incidents for recurring categories without matching knowledge articles, creates KB draft tasks, and alerts the knowledge management team.
  tags:
  - itsm
  - knowledge-management
  - servicenow
  - slack
  - automation
capability:
  exposes:
  - type: mcp
    namespace: kb-gap
    port: 8080
    tools:
    - name: detect-knowledge-gaps
      description: Query recent incidents, identify categories with no matching KB articles, and create KB authoring tasks.
      inputParameters:
      - name: days
        in: body
        type: string
        description: Number of days of incidents to analyze.
      steps:
      - name: query-incidents
        type: call
        call: servicenow.query-incidents
        with:
          sysparm_query: opened_atRELATIVEGE@day@ago@{{days}}
      - name: search-kb
        type: call
        call: servicenow.search-kb
        with:
          category: '{{query-incidents.top_unresolved_category}}'
      - name: create-kb-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'KB Gap: Write article for {{query-incidents.top_unresolved_category}}'
          assignment_group: knowledge-management
      - name: notify-km-team
        type: call
        call: slack.post-message
        with:
          channel: knowledge-management
          text: 'Knowledge gap detected: {{query-incidents.top_unresolved_category}} — {{query-incidents.unresolved_count}} incidents with no matching KB. Task: {{create-kb-task.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: incidents
      path: /table/incident
      inputParameters:
      - name: sysparm_query
        in: query
      operations:
      - name: query-incidents
        method: GET
    - name: knowledge
      path: /table/kb_knowledge
      inputParameters:
      - name: category
        in: query
      operations:
      - name: search-kb
        method: GET
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-knowledge-gap-detector.yml

Analyzes upstream and downstream configuration item relationships in the ServiceNow CMDB to determine the blast radius of a proposed change or outage.

naftiko: '0.5'
info:
  label: ServiceNow CI Relationship Impact Analysis
  description: Analyzes upstream and downstream configuration item relationships in the ServiceNow CMDB to determine the blast radius of a proposed change or outage.
  tags:
  - servicenow
  - cmdb
  - impact-analysis
  - change-management
capability:
  exposes:
  - type: mcp
    namespace: ci-impact-analysis
    port: 8080
    tools:
    - name: analyze-ci-impact
      description: Determine the blast radius of a change by analyzing CI relationships for a given configuration item.
      inputParameters:
      - name: ci_sys_id
        in: body
        type: string
        description: Sys ID of the configuration item to analyze.
      - name: depth
        in: body
        type: number
        description: Relationship traversal depth (default 2).
      call: servicenow.get-ci-relationships
      with:
        ci_sys_id: '{{ci_sys_id}}'
        depth: '{{depth}}'
      outputParameters:
      - name: affected_cis
        type: array
        mapping: $.result.affected_items
      - name: total_impacted
        type: number
        mapping: $.result.total_count
      - name: critical_services
        type: array
        mapping: $.result.critical_services
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://{{instance}}.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: ci-relationships
      path: /cmdb/instance/relations/{{ci_sys_id}}?depth={{depth}}
      inputParameters:
      - name: ci_sys_id
        in: path
      - name: depth
        in: query
      operations:
      - name: get-ci-relationships
        method: GET
Open in Framework → View in Fleet → servicenow-ci-relationship-impact-analysis.yml

Queries ServiceNow software asset management for license overuse, generates a compliance report, creates a remediation task, and emails the IT asset manager.

naftiko: '0.5'
info:
  label: ServiceNow License Compliance Audit
  description: Queries ServiceNow software asset management for license overuse, generates a compliance report, creates a remediation task, and emails the IT asset manager.
  tags:
  - itsm
  - asset-management
  - servicenow
  - compliance
  - automation
capability:
  exposes:
  - type: mcp
    namespace: license-audit
    port: 8080
    tools:
    - name: audit-license-compliance
      description: Check software license entitlements against actual installations, flag overuse, create a remediation task, and notify the asset manager.
      inputParameters:
      - name: software_name
        in: body
        type: string
        description: Name of the software product to audit.
      steps:
      - name: get-entitlements
        type: call
        call: servicenow.get-entitlements
        with:
          software_name: '{{software_name}}'
      - name: get-installations
        type: call
        call: servicenow.get-installations
        with:
          software_name: '{{software_name}}'
      - name: create-remediation-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'License overuse: {{software_name}} — {{get-installations.count}} installed vs {{get-entitlements.count}} entitled'
          assignment_group: it-asset-management
      - name: notify-manager
        type: call
        call: slack.post-message
        with:
          channel: it-asset-management
          text: 'License audit: {{software_name}} — {{get-installations.count}} installations vs {{get-entitlements.count}} entitlements. Task: {{create-remediation-task.number}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: entitlements
      path: /table/alm_entitlement
      inputParameters:
      - name: software_name
        in: query
      operations:
      - name: get-entitlements
        method: GET
    - name: installations
      path: /table/cmdb_sam_sw_install
      inputParameters:
      - name: software_name
        in: query
      operations:
      - name: get-installations
        method: GET
    - name: tasks
      path: /table/task
      operations:
      - name: create-task
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-license-compliance-audit.yml

After incident resolution, sends a CSAT survey link via Slack DM and records the survey dispatch in the incident work notes.

naftiko: '0.5'
info:
  label: ServiceNow Customer Satisfaction Survey
  description: After incident resolution, sends a CSAT survey link via Slack DM and records the survey dispatch in the incident work notes.
  tags:
  - itsm
  - customer-satisfaction
  - servicenow
  - slack
capability:
  exposes:
  - type: mcp
    namespace: csat-survey
    port: 8080
    tools:
    - name: send-csat-survey
      description: Given a resolved incident number, send a satisfaction survey to the caller via Slack and log it in ServiceNow.
      inputParameters:
      - name: incident_number
        in: body
        type: string
        description: ServiceNow incident number.
      steps:
      - name: get-incident
        type: call
        call: servicenow.get-incident
        with:
          number: '{{incident_number}}'
      - name: send-survey
        type: call
        call: slack.post-message
        with:
          channel: '{{get-incident.caller_slack_id}}'
          text: 'Your incident {{incident_number}} has been resolved. Please rate your experience: https://servicenow.service-now.com/survey?id={{get-incident.sys_id}}'
      - name: update-work-notes
        type: call
        call: servicenow.update-incident
        with:
          sys_id: '{{get-incident.sys_id}}'
          work_notes: CSAT survey sent to caller via Slack
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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
    - name: incident-update
      path: /table/incident/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: update-incident
        method: PATCH
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-customer-satisfaction-survey.yml

Retrieves a ServiceNow user record by user ID, returning name, email, department, and active status.

naftiko: '0.5'
info:
  label: ServiceNow User Record Lookup
  description: Retrieves a ServiceNow user record by user ID, returning name, email, department, and active status.
  tags:
  - itsm
  - user-management
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: snow-user
    port: 8080
    tools:
    - name: get-user
      description: Given a ServiceNow user ID, return the user's full name, email, department, and whether the account is active.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: ServiceNow user_name or sys_id.
      call: servicenow.get-user
      with:
        user_name: '{{user_id}}'
      outputParameters:
      - name: full_name
        type: string
        mapping: $.result[0].name
      - name: email
        type: string
        mapping: $.result[0].email
      - name: department
        type: string
        mapping: $.result[0].department.display_value
      - name: active
        type: string
        mapping: $.result[0].active
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: users
      path: /table/sys_user
      inputParameters:
      - name: user_name
        in: query
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → servicenow-user-record-lookup.yml

Queries ServiceNow for incidents that have breached their SLA in the past 24 hours and publishes the report to Power BI for leadership review.

naftiko: '0.5'
info:
  label: ServiceNow SLA Breach Report
  description: Queries ServiceNow for incidents that have breached their SLA in the past 24 hours and publishes the report to Power BI for leadership review.
  tags:
  - itsm
  - reporting
  - servicenow
  - power-bi
  - sla
capability:
  exposes:
  - type: mcp
    namespace: sla-reporting
    port: 8080
    tools:
    - name: publish-sla-breach-report
      description: Fetch all incidents that breached SLA in the past N hours from ServiceNow and push the list to a Power BI streaming dataset. Use for daily SLA reporting workflows.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours to look back for SLA breaches.
      - name: powerbi_dataset_id
        in: body
        type: string
        description: Power BI dataset ID to push breach data to.
      steps:
      - name: get-breaches
        type: call
        call: snow-sla.get-sla-breaches
        with:
          hoursBack: '{{hours_back}}'
      - name: push-report
        type: call
        call: powerbi.push-rows
        with:
          datasetId: '{{powerbi_dataset_id}}'
          tableName: SLABreaches
          rows: '{{get-breaches.result}}'
  consumes:
  - type: http
    namespace: snow-sla
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: sla-breaches
      path: /table/incident
      inputParameters:
      - name: hoursBack
        in: query
      operations:
      - name: get-sla-breaches
        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
Open in Framework → View in Fleet → servicenow-sla-breach-report.yml

When a PagerDuty alert fires, creates a corresponding ServiceNow incident with alert details and posts a correlation link to Slack.

naftiko: '0.5'
info:
  label: PagerDuty Alert to ServiceNow Incident
  description: When a PagerDuty alert fires, creates a corresponding ServiceNow incident with alert details and posts a correlation link to Slack.
  tags:
  - itsm
  - incident-management
  - servicenow
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pd-to-snow
    port: 8080
    tools:
    - name: create-incident-from-alert
      description: Given a PagerDuty alert ID, fetch alert details, create a ServiceNow incident, and post a cross-reference to Slack.
      inputParameters:
      - name: alert_id
        in: body
        type: string
        description: PagerDuty alert ID.
      steps:
      - name: get-pd-alert
        type: call
        call: pagerduty.get-alert
        with:
          alert_id: '{{alert_id}}'
      - name: create-snow-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'PD Alert: {{get-pd-alert.summary}}'
          urgency: '{{get-pd-alert.severity}}'
          description: 'PagerDuty Alert ID: {{alert_id}}

            Service: {{get-pd-alert.service_name}}

            Details: {{get-pd-alert.details}}'
      - name: post-correlation
        type: call
        call: slack.post-message
        with:
          channel: incidents
          text: PagerDuty alert {{alert_id}} linked to ServiceNow {{create-snow-incident.number}} — {{get-pd-alert.summary}}
  consumes:
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: apikey
      key: Authorization
      value: $secrets.pagerduty_token
      placement: header
    resources:
    - name: alerts
      path: /alerts/{{alert_id}}
      inputParameters:
      - name: alert_id
        in: path
      operations:
      - name: get-alert
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.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: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → pagerduty-alert-to-servicenow-incident.yml

Takes a security vulnerability finding, creates a change request for remediation, assigns it to the owning team, and notifies the security operations channel.

naftiko: '0.5'
info:
  label: ServiceNow Vulnerability to Change Request
  description: Takes a security vulnerability finding, creates a change request for remediation, assigns it to the owning team, and notifies the security operations channel.
  tags:
  - itsm
  - security
  - servicenow
  - change-management
  - slack
capability:
  exposes:
  - type: mcp
    namespace: vuln-to-change
    port: 8080
    tools:
    - name: create-change-from-vulnerability
      description: Given a vulnerability record sys_id, create a change request for remediation and notify the security ops team.
      inputParameters:
      - name: vuln_sys_id
        in: body
        type: string
        description: ServiceNow vulnerability record sys_id.
      steps:
      - name: get-vulnerability
        type: call
        call: servicenow.get-vulnerability
        with:
          sys_id: '{{vuln_sys_id}}'
      - name: create-change
        type: call
        call: servicenow.create-change
        with:
          short_description: 'Remediate: {{get-vulnerability.cve_id}} on {{get-vulnerability.host}}'
          type: standard
          risk: '{{get-vulnerability.severity}}'
          description: 'CVE: {{get-vulnerability.cve_id}}

            CVSS: {{get-vulnerability.cvss_score}}

            Host: {{get-vulnerability.host}}'
      - name: notify-secops
        type: call
        call: slack.post-message
        with:
          channel: secops
          text: Change request {{create-change.number}} created for {{get-vulnerability.cve_id}} remediation on {{get-vulnerability.host}}
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://servicenow.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.snow_user
      password: $secrets.snow_password
    resources:
    - name: vulnerabilities
      path: /table/sn_vul_vulnerability/{{sys_id}}
      inputParameters:
      - name: sys_id
        in: path
      operations:
      - name: get-vulnerability
        method: GET
    - name: change-requests
      path: /table/change_request
      operations:
      - name: create-change
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → servicenow-vulnerability-to-change-request.yml

Audits Snowflake role grants for a list of users, identifies excessive privileges, and creates a ServiceNow access review task for the security team.

naftiko: '0.5'
info:
  label: Access Review and ServiceNow Ticket Generator
  description: Audits Snowflake role grants for a list of users, identifies excessive privileges, and creates a ServiceNow access review task for the security team.
  tags:
  - security
  - compliance
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: access-review
    port: 8080
    tools:
    - name: run-access-review
      description: Audit Snowflake role assignments and create a ServiceNow task for any users with excessive privileges.
      inputParameters:
      - name: role_name
        in: body
        type: string
        description: The Snowflake role to audit (e.g., ACCOUNTADMIN, SYSADMIN).
      - name: assignment_group
        in: body
        type: string
        description: ServiceNow assignment group for the review task.
      steps:
      - name: get-role-grants
        type: call
        call: snowflake.submit-statement
        with:
          statement: SHOW GRANTS OF ROLE {{role_name}}
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: create-review-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Access Review: {{role_name}} role in Snowflake'
          description: The role {{role_name}} is currently granted to {{get-role-grants.data.length}} principals. Please review each assignment and revoke any that are no longer justified.
          assignment_group: '{{assignment_group}}'
          category: security_review
          priority: '2'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://{{snow_instance}}.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 → access-review-and-servicenow-ticket-generator.yml

Checks the execution history and status of a Snowflake task by name. Returns last run time, state, and error messages if any.

naftiko: '0.5'
info:
  label: Task Execution Status Checker
  description: Checks the execution history and status of a Snowflake task by name. Returns last run time, state, and error messages if any.
  tags:
  - data-engineering
  - scheduling
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-tasks
    port: 8080
    tools:
    - name: get-task-status
      description: Retrieve the execution history for a Snowflake task.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: Fully qualified Snowflake task name (database.schema.task).
      call: snowflake.submit-statement
      with:
        statement: SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(TASK_NAME => '{{task_name}}')) ORDER BY SCHEDULED_TIME DESC LIMIT 10
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: history
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → task-execution-status-checker.yml

Triggers a dbt Cloud job to run transformations against Snowflake, polls for completion, and posts the run status to a Slack channel for the data engineering team.

naftiko: '0.5'
info:
  label: ELT Pipeline Trigger and Monitor
  description: Triggers a dbt Cloud job to run transformations against Snowflake, polls for completion, and posts the run status to a Slack channel for the data engineering team.
  tags:
  - data-engineering
  - elt
  - snowflake
  - dbt
  - slack
capability:
  exposes:
  - type: mcp
    namespace: elt-pipeline
    port: 8080
    tools:
    - name: trigger-dbt-run
      description: Trigger a dbt Cloud job, wait for completion, and report results to Slack.
      inputParameters:
      - name: dbt_job_id
        in: body
        type: string
        description: The dbt Cloud job ID to trigger.
      - name: cause
        in: body
        type: string
        description: Reason for triggering the dbt run.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel ID to post run results.
      steps:
      - name: trigger-job
        type: call
        call: dbt-cloud.trigger-run
        with:
          job_id: '{{dbt_job_id}}'
          cause: '{{cause}}'
      - name: get-run-status
        type: call
        call: dbt-cloud.get-run
        with:
          run_id: '{{trigger-job.data.id}}'
      - name: post-result
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'dbt Cloud run {{trigger-job.data.id}} for job {{dbt_job_id}} completed with status: {{get-run-status.data.status_humanized}}. Duration: {{get-run-status.data.duration_humanized}}. Triggered by: {{cause}}'
  consumes:
  - type: http
    namespace: dbt-cloud
    baseUri: https://cloud.getdbt.com/api/v2/accounts/{{dbt_account_id}}
    authentication:
      type: bearer
      token: $secrets.dbt_cloud_token
    resources:
    - name: runs
      path: /jobs/{{job_id}}/run
      inputParameters:
      - name: job_id
        in: path
      operations:
      - name: trigger-run
        method: POST
    - name: run-details
      path: /runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-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 → elt-pipeline-trigger-and-monitor.yml

Orchestrates data mesh self service pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Mesh Self Service Pipeline
  description: Orchestrates data mesh self service pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - jira
  - datadog
  - github
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-mesh-self-service-pipeline
      description: Orchestrates data mesh self service pipeline across cloud data platform 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: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: github.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      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/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-mesh-self-service-pipeline.yml

Retrieves warehouse auto suspend config data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Warehouse Auto Suspend Config
  description: Retrieves warehouse auto suspend config data from the Snowflake cloud data platform systems.
  tags:
  - warehouse
  - snowflake
  - config
capability:
  exposes:
  - type: mcp
    namespace: warehouse
    port: 8080
    tools:
    - name: warehouse-auto-suspend-config
      description: Retrieves warehouse auto suspend config data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.warehouse-auto-suspend-config
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /warehouse/auto/suspend/config/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: warehouse-auto-suspend-config
        method: GET
Open in Framework → View in Fleet → warehouse-auto-suspend-config.yml

Orchestrates data mesh domain provisioning pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Mesh Domain Provisioning Pipeline
  description: Orchestrates data mesh domain provisioning pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-mesh-domain-provisioning-pipeline
      description: Orchestrates data mesh domain provisioning pipeline across cloud data platform 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/data
      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/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-mesh-domain-provisioning-pipeline.yml

Queries Snowflake Access History to trace data lineage for a table, then publishes the lineage graph to a Confluence documentation page for governance teams.

naftiko: '0.5'
info:
  label: Snowflake Data Lineage Reporter
  description: Queries Snowflake Access History to trace data lineage for a table, then publishes the lineage graph to a Confluence documentation page for governance teams.
  tags:
  - data-governance
  - lineage
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: data-lineage
    port: 8080
    tools:
    - name: trace-lineage
      description: Trace data lineage for a Snowflake table and publish to Confluence.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified table name to trace lineage for.
      - name: days_back
        in: body
        type: integer
        description: Number of days of access history to analyze.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID for lineage documentation.
      steps:
      - name: get-lineage
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT DISTINCT DIRECT_OBJECTS_ACCESSED, BASE_OBJECTS_ACCESSED, OBJECTS_MODIFIED, USER_NAME, QUERY_START_TIME FROM SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY WHERE ARRAY_CONTAINS('{{table_name}}'::VARIANT, OBJECTS_MODIFIED:objectName) AND QUERY_START_TIME >= DATEADD(days, -{{days_back}}, CURRENT_TIMESTAMP()) ORDER BY QUERY_START_TIME DESC LIMIT 50
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: publish-to-confluence
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          title: 'Data Lineage: {{table_name}}'
          body: Lineage analysis for {{table_name}} over the last {{days_back}} days. {{get-lineage.data.length}} transformation operations detected.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://{{confluence_domain}}.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → snowflake-data-lineage-reporter.yml

Orchestrates cross cloud replication pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Cross Cloud Replication Pipeline
  description: Orchestrates cross cloud replication pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - cross
  - snowflake
  - datadog
  - github
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: cross
    port: 8080
    tools:
    - name: cross-cloud-replication-pipeline
      description: Orchestrates cross cloud replication pipeline across cloud data platform 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: github.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.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/cross
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/cross
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/cross
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → cross-cloud-replication-pipeline.yml

When a Snowflake task fails, retrieves the error details from task history, creates a PagerDuty incident, and posts an alert to a Slack channel so the on-call data engineer can respond.

naftiko: '0.5'
info:
  label: Data Pipeline Failure Alert Orchestrator
  description: When a Snowflake task fails, retrieves the error details from task history, creates a PagerDuty incident, and posts an alert to a Slack channel so the on-call data engineer can respond.
  tags:
  - data-engineering
  - alerting
  - snowflake
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: pipeline-alerting
    port: 8080
    tools:
    - name: alert-task-failure
      description: Given a failed Snowflake task name, pull the error details, create a PagerDuty incident, and notify Slack.
      inputParameters:
      - name: task_name
        in: body
        type: string
        description: Fully qualified Snowflake task name that failed.
      - name: escalation_policy_id
        in: body
        type: string
        description: PagerDuty escalation policy ID for the on-call team.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel ID for pipeline alerts.
      steps:
      - name: get-task-error
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT * FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(TASK_NAME => '{{task_name}}')) WHERE STATE = 'FAILED' ORDER BY SCHEDULED_TIME DESC LIMIT 1
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Snowflake Task Failure: {{task_name}}'
          urgency: high
          escalation_policy_id: '{{escalation_policy_id}}'
          body: 'Task {{task_name}} failed at {{get-task-error.data[0][2]}}. Error: {{get-task-error.data[0][5]}}'
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Pipeline Alert: Snowflake task `{{task_name}}` failed. PagerDuty incident {{create-incident.id}} created. Error: {{get-task-error.data[0][5]}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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 → data-pipeline-failure-alert-orchestrator.yml

Creates a zero-copy clone of a production Snowflake database for development, applies masking policies, and notifies the requesting developer in Microsoft Teams.

naftiko: '0.5'
info:
  label: Snowflake Clone for Dev Environment
  description: Creates a zero-copy clone of a production Snowflake database for development, applies masking policies, and notifies the requesting developer in Microsoft Teams.
  tags:
  - platform
  - data-engineering
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: env-cloning
    port: 8080
    tools:
    - name: clone-database
      description: Create a zero-copy clone of a Snowflake database and notify the requestor.
      inputParameters:
      - name: source_database
        in: body
        type: string
        description: Production database to clone.
      - name: clone_name
        in: body
        type: string
        description: Name for the cloned database.
      - name: requestor_email
        in: body
        type: string
        description: Email of the developer requesting the clone.
      steps:
      - name: create-clone
        type: call
        call: snowflake.submit-statement
        with:
          statement: CREATE DATABASE {{clone_name}} CLONE {{source_database}}
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: grant-access
        type: call
        call: snowflake.submit-statement
        with:
          statement: GRANT USAGE ON DATABASE {{clone_name}} TO ROLE DEV_ROLE; GRANT USAGE ON ALL SCHEMAS IN DATABASE {{clone_name}} TO ROLE DEV_ROLE; GRANT SELECT ON ALL TABLES IN DATABASE {{clone_name}} TO ROLE DEV_ROLE
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: notify-developer
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{requestor_email}}'
          text: Your Snowflake dev clone '{{clone_name}}' from '{{source_database}}' is ready. Access granted via DEV_ROLE. Clone will be auto-dropped in 7 days.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-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: /users/{{recipient_upn}}/sendMail
      inputParameters:
      - name: recipient_upn
        in: path
      operations:
      - name: send-message
        method: POST
Open in Framework → View in Fleet → snowflake-clone-for-dev-environment.yml

Creates and applies a row access policy in Snowflake for multi-tenant data isolation, verifies the policy attachment, and notifies the governance channel in Slack.

naftiko: '0.5'
info:
  label: Row Access Policy Provisioner
  description: Creates and applies a row access policy in Snowflake for multi-tenant data isolation, verifies the policy attachment, and notifies the governance channel in Slack.
  tags:
  - data-governance
  - security
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: row-access
    port: 8080
    tools:
    - name: provision-row-access-policy
      description: Create a row access policy in Snowflake, apply it to a table, and notify governance team in Slack.
      inputParameters:
      - name: policy_name
        in: body
        type: string
        description: Name for the new row access policy.
      - name: table_name
        in: body
        type: string
        description: Table to apply the policy to.
      - name: filter_column
        in: body
        type: string
        description: Column to use for row filtering.
      - name: allowed_role
        in: body
        type: string
        description: Role that should have unrestricted access.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for governance notifications.
      steps:
      - name: create-policy
        type: call
        call: snowflake.submit-statement
        with:
          statement: CREATE OR REPLACE ROW ACCESS POLICY {{policy_name}} AS (val VARCHAR) RETURNS BOOLEAN -> IS_ROLE_IN_SESSION('{{allowed_role}}') OR val = CURRENT_ROLE()
          warehouse: ADMIN_WH
          database: GOVERNANCE
          schema: POLICIES
      - name: apply-policy
        type: call
        call: snowflake.submit-statement
        with:
          statement: ALTER TABLE {{table_name}} ADD ROW ACCESS POLICY {{policy_name}} ON ({{filter_column}})
          warehouse: ADMIN_WH
          database: GOVERNANCE
          schema: POLICIES
      - name: notify-governance
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Row Access Policy ''{{policy_name}}'' created and applied to {{table_name}} on column {{filter_column}}. Unrestricted role: {{allowed_role}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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 → row-access-policy-provisioner.yml

Orchestrates data observability pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Observability Pipeline
  description: Orchestrates data observability pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - pagerduty
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-observability-pipeline
      description: Orchestrates data observability pipeline across cloud data platform 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: pagerduty.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-observability-pipeline.yml

Queries Snowflake tag references to report which columns have been classified with sensitivity tags. Used by governance teams to verify data classification coverage.

naftiko: '0.5'
info:
  label: Tag-Based Data Classification Reporter
  description: Queries Snowflake tag references to report which columns have been classified with sensitivity tags. Used by governance teams to verify data classification coverage.
  tags:
  - data-governance
  - classification
  - compliance
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-classification
    port: 8080
    tools:
    - name: get-classification-report
      description: List all columns tagged with a specific sensitivity classification tag.
      inputParameters:
      - name: tag_name
        in: body
        type: string
        description: The fully qualified tag name (e.g., GOVERNANCE.TAGS.PII).
      call: snowflake.submit-statement
      with:
        statement: SELECT * FROM TABLE(SNOWFLAKE.ACCOUNT_USAGE.TAG_REFERENCES('{{tag_name}}', 'COLUMN')) ORDER BY OBJECT_DATABASE, OBJECT_SCHEMA, OBJECT_NAME
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: tagged_columns
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → tag-based-data-classification-reporter.yml

Orchestrates data engineering cicd pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Engineering Cicd Pipeline
  description: Orchestrates data engineering cicd pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - datadog
  - github
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-engineering-cicd-pipeline
      description: Orchestrates data engineering cicd pipeline across cloud data platform 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: github.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.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/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-engineering-cicd-pipeline.yml

Retrieves external table metadata data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: External Table Metadata
  description: Retrieves external table metadata data from the Snowflake cloud data platform systems.
  tags:
  - external
  - snowflake
  - metadata
capability:
  exposes:
  - type: mcp
    namespace: external
    port: 8080
    tools:
    - name: external-table-metadata
      description: Retrieves external table metadata data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.external-table-metadata
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /external/table/metadata/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: external-table-metadata
        method: GET
Open in Framework → View in Fleet → external-table-metadata.yml

Orchestrates data product marketplace pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Product Marketplace Pipeline
  description: Orchestrates data product marketplace pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - jira
  - datadog
  - github
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-product-marketplace-pipeline
      description: Orchestrates data product marketplace pipeline across cloud data platform 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: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: github.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      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/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-product-marketplace-pipeline.yml

Checks Snowflake resource monitor thresholds, and when credit limits are approaching, sends a notification to Slack and suspends the warehouse to prevent budget overruns.

naftiko: '0.5'
info:
  label: Snowflake Resource Monitor Alert
  description: Checks Snowflake resource monitor thresholds, and when credit limits are approaching, sends a notification to Slack and suspends the warehouse to prevent budget overruns.
  tags:
  - cost-management
  - platform
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: resource-monitor
    port: 8080
    tools:
    - name: check-resource-monitors
      description: Check Snowflake resource monitor usage and suspend warehouses approaching their credit limit.
      inputParameters:
      - name: monitor_name
        in: body
        type: string
        description: Snowflake resource monitor name to check.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for resource monitor alerts.
      steps:
      - name: get-monitor-usage
        type: call
        call: snowflake.submit-statement
        with:
          statement: SHOW RESOURCE MONITORS LIKE '{{monitor_name}}'
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: suspend-warehouse
        type: call
        call: snowflake.submit-statement
        with:
          statement: ALTER WAREHOUSE {{monitor_name}}_WH SUSPEND
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: notify-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Resource Monitor Alert: ''{{monitor_name}}'' is approaching credit limit. Warehouse suspended to prevent overrun. Current usage: {{get-monitor-usage.data[0][4]}} credits.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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 → snowflake-resource-monitor-alert.yml

Retrieves password policy config data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Password Policy Config
  description: Retrieves password policy config data from the Snowflake cloud data platform systems.
  tags:
  - password
  - snowflake
  - config
capability:
  exposes:
  - type: mcp
    namespace: password
    port: 8080
    tools:
    - name: password-policy-config
      description: Retrieves password policy config data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.password-policy-config
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /password/policy/config/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: password-policy-config
        method: GET
Open in Framework → View in Fleet → password-policy-config.yml

Triggers an Apache NiFi processor group to extract data from a source system, monitors the flow status, and verifies rows landed in the target Snowflake table.

naftiko: '0.5'
info:
  label: NiFi to Snowflake Ingestion Coordinator
  description: Triggers an Apache NiFi processor group to extract data from a source system, monitors the flow status, and verifies rows landed in the target Snowflake table.
  tags:
  - data-engineering
  - ingestion
  - snowflake
  - apache-nifi
capability:
  exposes:
  - type: mcp
    namespace: nifi-ingestion
    port: 8080
    tools:
    - name: trigger-nifi-flow
      description: Start an Apache NiFi processor group and verify data arrived in Snowflake.
      inputParameters:
      - name: processor_group_id
        in: body
        type: string
        description: NiFi processor group ID to start.
      - name: target_table
        in: body
        type: string
        description: Fully qualified Snowflake target table.
      - name: expected_min_rows
        in: body
        type: integer
        description: Minimum expected row count after ingestion.
      steps:
      - name: start-nifi-group
        type: call
        call: nifi.start-processor-group
        with:
          id: '{{processor_group_id}}'
          state: RUNNING
      - name: check-nifi-status
        type: call
        call: nifi.get-processor-group
        with:
          id: '{{processor_group_id}}'
      - name: verify-row-count
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT COUNT(*) AS ROW_COUNT FROM {{target_table}}
          warehouse: ETL_WH
          database: RAW
          schema: PUBLIC
  consumes:
  - type: http
    namespace: nifi
    baseUri: https://{{nifi_host}}/nifi-api
    authentication:
      type: bearer
      token: $secrets.nifi_token
    resources:
    - name: processor-groups
      path: /flow/process-groups/{{id}}
      inputParameters:
      - name: id
        in: path
      operations:
      - name: start-processor-group
        method: PUT
      - name: get-processor-group
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → nifi-to-snowflake-ingestion-coordinator.yml

Registers an external Apache Iceberg table in Snowflake from an S3 catalog location, validates the schema, and logs the registration in a Snowflake metadata table.

naftiko: '0.5'
info:
  label: Iceberg Table Registration and Validation
  description: Registers an external Apache Iceberg table in Snowflake from an S3 catalog location, validates the schema, and logs the registration in a Snowflake metadata table.
  tags:
  - data-engineering
  - iceberg
  - snowflake
  - aws-s3
capability:
  exposes:
  - type: mcp
    namespace: iceberg-tables
    port: 8080
    tools:
    - name: register-iceberg-table
      description: Create an Iceberg table in Snowflake from an S3 catalog and validate the schema.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Name for the Iceberg table in Snowflake.
      - name: catalog_path
        in: body
        type: string
        description: S3 path to the Iceberg catalog metadata.
      - name: database
        in: body
        type: string
        description: Target Snowflake database.
      - name: schema
        in: body
        type: string
        description: Target Snowflake schema.
      steps:
      - name: create-iceberg-table
        type: call
        call: snowflake.submit-statement
        with:
          statement: CREATE OR REPLACE ICEBERG TABLE {{database}}.{{schema}}.{{table_name}} EXTERNAL_VOLUME = 'S3_VOLUME' CATALOG = 'SNOWFLAKE' BASE_LOCATION = '{{catalog_path}}'
          warehouse: ETL_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: validate-schema
        type: call
        call: snowflake.submit-statement
        with:
          statement: DESCRIBE TABLE {{database}}.{{schema}}.{{table_name}}
          warehouse: ETL_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: log-registration
        type: call
        call: snowflake.submit-statement
        with:
          statement: INSERT INTO {{database}}.{{schema}}.TABLE_REGISTRY (TABLE_NAME, TABLE_TYPE, CATALOG_PATH, COLUMN_COUNT, REGISTERED_AT) VALUES ('{{table_name}}', 'ICEBERG', '{{catalog_path}}', {{validate-schema.data.length}}, CURRENT_TIMESTAMP())
          warehouse: ETL_WH
          database: '{{database}}'
          schema: '{{schema}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → iceberg-table-registration-and-validation.yml

Creates an external function in Snowflake that proxies to an AWS Lambda via API Gateway, verifies the integration, and documents the function in Confluence.

naftiko: '0.5'
info:
  label: Snowflake External Function Deployer
  description: Creates an external function in Snowflake that proxies to an AWS Lambda via API Gateway, verifies the integration, and documents the function in Confluence.
  tags:
  - platform
  - serverless
  - snowflake
  - aws-lambda
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: external-functions
    port: 8080
    tools:
    - name: deploy-external-function
      description: Create a Snowflake external function backed by AWS Lambda and document in Confluence.
      inputParameters:
      - name: function_name
        in: body
        type: string
        description: Name for the Snowflake external function.
      - name: api_integration
        in: body
        type: string
        description: Snowflake API integration name for the Lambda proxy.
      - name: lambda_url
        in: body
        type: string
        description: API Gateway endpoint URL for the Lambda function.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page for external function documentation.
      steps:
      - name: create-function
        type: call
        call: snowflake.submit-statement
        with:
          statement: CREATE OR REPLACE EXTERNAL FUNCTION {{function_name}}(input VARIANT) RETURNS VARIANT API_INTEGRATION = {{api_integration}} AS '{{lambda_url}}'
          warehouse: ADMIN_WH
          database: INTEGRATIONS
          schema: EXTERNAL_FUNCTIONS
      - name: test-function
        type: call
        call: snowflake.submit-statement
        with:
          statement: 'SELECT {{function_name}}(PARSE_JSON(''{"test": true}'')) AS TEST_RESULT'
          warehouse: ADMIN_WH
          database: INTEGRATIONS
          schema: EXTERNAL_FUNCTIONS
      - name: document-function
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          title: 'External Function: {{function_name}}'
          body: 'External function {{function_name}} deployed. API Integration: {{api_integration}}. Lambda URL: {{lambda_url}}. Test result: {{test-function.data[0][0]}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://{{confluence_domain}}.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → snowflake-external-function-deployer.yml

Extracts updated records from Salesforce, stages them in an S3 bucket, and triggers a Snowpipe to load the data into a Snowflake staging table for downstream analytics.

naftiko: '0.5'
info:
  label: Salesforce Data Sync to Snowflake
  description: Extracts updated records from Salesforce, stages them in an S3 bucket, and triggers a Snowpipe to load the data into a Snowflake staging table for downstream analytics.
  tags:
  - data-integration
  - data-engineering
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: sf-sync
    port: 8080
    tools:
    - name: sync-salesforce-to-snowflake
      description: Pull recent Salesforce records and load them into Snowflake via Snowpipe.
      inputParameters:
      - name: sobject
        in: body
        type: string
        description: Salesforce object API name (e.g., Account, Opportunity).
      - name: since_date
        in: body
        type: string
        description: ISO 8601 date to filter records modified since.
      - name: pipe_name
        in: body
        type: string
        description: Fully qualified Snowpipe name to trigger.
      steps:
      - name: query-salesforce
        type: call
        call: salesforce.query-records
        with:
          q: SELECT Id, Name, LastModifiedDate FROM {{sobject}} WHERE LastModifiedDate >= {{since_date}}
      - name: trigger-pipe
        type: call
        call: snowflake.submit-statement
        with:
          statement: ALTER PIPE {{pipe_name}} REFRESH
          warehouse: ETL_WH
          database: RAW
          schema: SALESFORCE
      - name: verify-load
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT SYSTEM$PIPE_STATUS('{{pipe_name}}')
          warehouse: ETL_WH
          database: RAW
          schema: SALESFORCE
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://{{sf_instance}}.salesforce.com/services/data/v59.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: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → salesforce-data-sync-to-snowflake.yml

Orchestrates data quality sla enforcement pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Quality Sla Enforcement Pipeline
  description: Orchestrates data quality sla enforcement pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - terraform
  - pagerduty
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-quality-sla-enforcement-pipeline
      description: Orchestrates data quality sla enforcement pipeline across cloud data platform 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: terraform.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: pagerduty.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-quality-sla-enforcement-pipeline.yml

Retrieves alert condition status data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Alert Condition Status
  description: Retrieves alert condition status data from the Snowflake cloud data platform systems.
  tags:
  - alert
  - snowflake
  - status
capability:
  exposes:
  - type: mcp
    namespace: alert
    port: 8080
    tools:
    - name: alert-condition-status
      description: Retrieves alert condition status data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.alert-condition-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /alert/condition/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: alert-condition-status
        method: GET
Open in Framework → View in Fleet → alert-condition-status.yml

Runs a data quality SQL check against a Snowflake table. If anomalies are detected, creates a Jira issue for the data engineering team and notifies them in Microsoft Teams.

naftiko: '0.5'
info:
  label: Data Quality Check and Jira Ticket Creator
  description: Runs a data quality SQL check against a Snowflake table. If anomalies are detected, creates a Jira issue for the data engineering team and notifies them in Microsoft Teams.
  tags:
  - data-quality
  - data-engineering
  - snowflake
  - jira
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: data-quality
    port: 8080
    tools:
    - name: run-quality-check
      description: Execute a data quality SQL assertion against Snowflake and create a Jira ticket if it fails.
      inputParameters:
      - name: check_query
        in: body
        type: string
        description: SQL query that returns rows representing data quality violations.
      - name: check_name
        in: body
        type: string
        description: Human-readable name for this quality check.
      - name: database
        in: body
        type: string
        description: Snowflake database to run the check against.
      - name: jira_project_key
        in: body
        type: string
        description: Jira project key for filing data quality issues.
      - name: teams_channel_webhook
        in: body
        type: string
        description: Microsoft Teams incoming webhook URL for notifications.
      steps:
      - name: run-check
        type: call
        call: snowflake.submit-statement
        with:
          statement: '{{check_query}}'
          warehouse: COMPUTE_WH
          database: '{{database}}'
          schema: PUBLIC
      - name: create-jira-issue
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          summary: 'Data Quality Failure: {{check_name}}'
          description: 'Quality check ''{{check_name}}'' detected {{run-check.data.length}} violations in database {{database}}. Query: {{check_query}}'
          issue_type: Bug
          priority: High
      - name: notify-teams
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_channel_webhook}}'
          text: 'Data Quality Alert: ''{{check_name}}'' found violations. Jira ticket {{create-jira-issue.key}} created. Review immediately.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: jira
    baseUri: https://{{jira_domain}}.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://outlook.office.com/webhook
    authentication:
      type: none
    resources:
    - name: webhook
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → data-quality-check-and-jira-ticket-creator.yml

Queries a Snowflake Cortex Search service to find relevant documents or records using semantic search, and returns ranked results with relevance scores.

naftiko: '0.5'
info:
  label: Cortex Search Service Query
  description: Queries a Snowflake Cortex Search service to find relevant documents or records using semantic search, and returns ranked results with relevance scores.
  tags:
  - machine-learning
  - cortex
  - search
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cortex-search
    port: 8080
    tools:
    - name: semantic-search
      description: Run a semantic search query against a Snowflake Cortex Search service.
      inputParameters:
      - name: search_service
        in: body
        type: string
        description: Fully qualified Cortex Search service name.
      - name: query_text
        in: body
        type: string
        description: Natural language query for semantic search.
      - name: max_results
        in: body
        type: integer
        description: Maximum number of results to return.
      steps:
      - name: run-search
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT * FROM TABLE({{search_service}}!SEARCH(QUERY => '{{query_text}}', LIMIT => {{max_results}}))
          warehouse: ML_WH
          database: ANALYTICS
          schema: SEARCH
      - name: log-query
        type: call
        call: snowflake.submit-statement
        with:
          statement: INSERT INTO ANALYTICS.SEARCH.QUERY_LOG (QUERY_TEXT, SERVICE_NAME, RESULT_COUNT, QUERIED_AT) VALUES ('{{query_text}}', '{{search_service}}', {{run-search.data.length}}, CURRENT_TIMESTAMP())
          warehouse: ML_WH
          database: ANALYTICS
          schema: SEARCH
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → cortex-search-service-query.yml

Runs Snowflake Cortex SENTIMENT function on a text column and returns sentiment scores. Used by customer analytics teams to gauge feedback tone.

naftiko: '0.5'
info:
  label: Cortex Sentiment Analyzer
  description: Runs Snowflake Cortex SENTIMENT function on a text column and returns sentiment scores. Used by customer analytics teams to gauge feedback tone.
  tags:
  - machine-learning
  - cortex
  - nlp
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-cortex-nlp
    port: 8080
    tools:
    - name: analyze-sentiment
      description: Run Cortex SENTIMENT analysis on a text column in a Snowflake table.
      inputParameters:
      - name: source_table
        in: body
        type: string
        description: Fully qualified table name containing text data.
      - name: text_column
        in: body
        type: string
        description: The column name containing text to analyze.
      - name: limit
        in: body
        type: integer
        description: Maximum number of rows to analyze.
      call: snowflake.submit-statement
      with:
        statement: SELECT {{text_column}}, SNOWFLAKE.CORTEX.SENTIMENT({{text_column}}) AS sentiment_score FROM {{source_table}} LIMIT {{limit}}
        warehouse: ML_WH
        database: ANALYTICS
        schema: PUBLIC
      outputParameters:
      - name: results
        type: array
        mapping: $.data
      - name: query_id
        type: string
        mapping: $.statementHandle
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → cortex-sentiment-analyzer.yml

Retrieves session policy lookup data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Session Policy Lookup
  description: Retrieves session policy lookup data from the Snowflake cloud data platform systems.
  tags:
  - session
  - snowflake
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: session
    port: 8080
    tools:
    - name: session-policy-lookup
      description: Retrieves session policy lookup data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.session-policy-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /session/policy/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: session-policy-lookup
        method: GET
Open in Framework → View in Fleet → session-policy-lookup.yml

Resizes a Snowflake virtual warehouse to a specified size. Used by platform teams to scale compute up or down based on workload demand.

naftiko: '0.5'
info:
  label: Warehouse Scaling Manager
  description: Resizes a Snowflake virtual warehouse to a specified size. Used by platform teams to scale compute up or down based on workload demand.
  tags:
  - platform
  - compute
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-warehouse
    port: 8080
    tools:
    - name: resize-warehouse
      description: Alter a Snowflake warehouse to a new size (e.g., X-Small, Small, Medium, Large).
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: The name of the virtual warehouse to resize.
      - name: new_size
        in: body
        type: string
        description: Target warehouse size (XSMALL, SMALL, MEDIUM, LARGE, XLARGE).
      call: snowflake.submit-statement
      with:
        statement: ALTER WAREHOUSE {{warehouse_name}} SET WAREHOUSE_SIZE = '{{new_size}}'
        warehouse: '{{warehouse_name}}'
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → warehouse-scaling-manager.yml

Orchestrates snowflake disaster recovery pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Disaster Recovery Pipeline
  description: Orchestrates snowflake disaster recovery pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - servicenow
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-disaster-recovery-pipeline
      description: Orchestrates snowflake disaster recovery pipeline across cloud data platform 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: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/snowflake
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-disaster-recovery-pipeline.yml

Orchestrates cortex ai function deployment pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Cortex Ai Function Deployment Pipeline
  description: Orchestrates cortex ai function deployment pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - cortex
  - snowflake
  - slack
  - jira
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: cortex
    port: 8080
    tools:
    - name: cortex-ai-function-deployment-pipeline
      description: Orchestrates cortex ai function deployment pipeline across cloud data platform 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: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.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/cortex
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/cortex
      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/cortex
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → cortex-ai-function-deployment-pipeline.yml

Orchestrates data quality remediation pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Quality Remediation Pipeline
  description: Orchestrates data quality remediation pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - salesforce
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-quality-remediation-pipeline
      description: Orchestrates data quality remediation pipeline across cloud data platform 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: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/data
      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/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-quality-remediation-pipeline.yml

Orchestrates snowflake hybrid table pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Hybrid Table Pipeline
  description: Orchestrates snowflake hybrid table pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - confluence
  - terraform
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-hybrid-table-pipeline
      description: Orchestrates snowflake hybrid table pipeline across cloud data platform 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: terraform.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: pagerduty.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/snowflake
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-hybrid-table-pipeline.yml

Checks the offset lag on a Snowflake stream by querying its metadata. Used by data engineers to detect stale change data capture pipelines.

naftiko: '0.5'
info:
  label: Stream Lag Monitor
  description: Checks the offset lag on a Snowflake stream by querying its metadata. Used by data engineers to detect stale change data capture pipelines.
  tags:
  - data-engineering
  - cdc
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-streams
    port: 8080
    tools:
    - name: check-stream-lag
      description: Query metadata for a Snowflake stream to check stale offset and lag status.
      inputParameters:
      - name: stream_name
        in: body
        type: string
        description: Fully qualified Snowflake stream name (database.schema.stream).
      call: snowflake.submit-statement
      with:
        statement: DESCRIBE STREAM {{stream_name}}
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: stream_info
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → stream-lag-monitor.yml

Orchestrates data lakehouse optimization pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Lakehouse Optimization Pipeline
  description: Orchestrates data lakehouse optimization pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - github
  - confluence
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-lakehouse-optimization-pipeline
      description: Orchestrates data lakehouse optimization pipeline across cloud data platform 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: github.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: terraform.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-lakehouse-optimization-pipeline.yml

Identifies the top slow-running queries in Snowflake over a given period, fetches their execution plans, and posts a summary to a Datadog dashboard event stream for performance monitoring.

naftiko: '0.5'
info:
  label: Slow Query Investigator
  description: Identifies the top slow-running queries in Snowflake over a given period, fetches their execution plans, and posts a summary to a Datadog dashboard event stream for performance monitoring.
  tags:
  - performance
  - data-warehousing
  - snowflake
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: query-performance
    port: 8080
    tools:
    - name: investigate-slow-queries
      description: Find top slow queries in Snowflake and push a summary event to Datadog.
      inputParameters:
      - name: hours_back
        in: body
        type: integer
        description: Number of hours to look back for slow queries.
      - name: min_duration_seconds
        in: body
        type: integer
        description: Minimum execution time in seconds to flag as slow.
      - name: dd_tags
        in: body
        type: string
        description: Comma-separated Datadog tags for the event.
      steps:
      - name: find-slow-queries
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT QUERY_ID, QUERY_TEXT, TOTAL_ELAPSED_TIME/1000 AS DURATION_SEC, WAREHOUSE_NAME, USER_NAME, START_TIME FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE START_TIME >= DATEADD(hours, -{{hours_back}}, CURRENT_TIMESTAMP()) AND TOTAL_ELAPSED_TIME > {{min_duration_seconds}} * 1000 ORDER BY TOTAL_ELAPSED_TIME DESC LIMIT 20
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: post-to-datadog
        type: call
        call: datadog.create-event
        with:
          title: Snowflake Slow Query Report (last {{hours_back}}h)
          text: 'Found {{find-slow-queries.data.length}} queries exceeding {{min_duration_seconds}}s threshold. Top query: {{find-slow-queries.data[0][1]}} ({{find-slow-queries.data[0][2]}}s)'
          tags: '{{dd_tags}}'
          alert_type: warning
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: apiKey
      key: $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
Open in Framework → View in Fleet → slow-query-investigator.yml

Orchestrates data marketplace listing pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Marketplace Listing Pipeline
  description: Orchestrates data marketplace listing pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - slack
  - jira
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-marketplace-listing-pipeline
      description: Orchestrates data marketplace listing pipeline across cloud data platform 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: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.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/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      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/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-marketplace-listing-pipeline.yml

Uses Snowflake Cortex SUMMARIZE function to generate text summaries from a document table and stores results in a summary output table.

naftiko: '0.5'
info:
  label: Cortex LLM Text Summarizer
  description: Uses Snowflake Cortex SUMMARIZE function to generate text summaries from a document table and stores results in a summary output table.
  tags:
  - machine-learning
  - cortex
  - nlp
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: cortex-summarize
    port: 8080
    tools:
    - name: summarize-documents
      description: Run Snowflake Cortex SUMMARIZE on a text column and store summaries.
      inputParameters:
      - name: source_table
        in: body
        type: string
        description: Fully qualified source table with documents.
      - name: text_column
        in: body
        type: string
        description: Column containing text to summarize.
      - name: output_table
        in: body
        type: string
        description: Fully qualified output table for summaries.
      - name: id_column
        in: body
        type: string
        description: Primary key column for the source table.
      steps:
      - name: run-summarize
        type: call
        call: snowflake.submit-statement
        with:
          statement: INSERT INTO {{output_table}} ({{id_column}}, SUMMARY, GENERATED_AT) SELECT {{id_column}}, SNOWFLAKE.CORTEX.SUMMARIZE({{text_column}}), CURRENT_TIMESTAMP() FROM {{source_table}} WHERE {{id_column}} NOT IN (SELECT {{id_column}} FROM {{output_table}})
          warehouse: ML_WH
          database: ANALYTICS
          schema: PUBLIC
      - name: count-summaries
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT COUNT(*) AS NEW_SUMMARIES FROM {{output_table}} WHERE GENERATED_AT >= DATEADD(minutes, -5, CURRENT_TIMESTAMP())
          warehouse: ML_WH
          database: ANALYTICS
          schema: PUBLIC
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → cortex-llm-text-summarizer.yml

Orchestrates snowflake account migration pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Account Migration Pipeline
  description: Orchestrates snowflake account migration pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - github
  - confluence
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-account-migration-pipeline
      description: Orchestrates snowflake account migration pipeline across cloud data platform 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: github.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: terraform.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/snowflake
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-account-migration-pipeline.yml

Returns the refresh history for a Snowflake dynamic table, including last refresh time and data freshness. Helps data engineers verify materialized views are current.

naftiko: '0.5'
info:
  label: Dynamic Table Refresh Status
  description: Returns the refresh history for a Snowflake dynamic table, including last refresh time and data freshness. Helps data engineers verify materialized views are current.
  tags:
  - data-engineering
  - dynamic-tables
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-dynamic-tables
    port: 8080
    tools:
    - name: get-dynamic-table-refresh
      description: Retrieve refresh history for a Snowflake dynamic table.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified dynamic table name (database.schema.table).
      call: snowflake.submit-statement
      with:
        statement: SELECT * FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(NAME => '{{table_name}}')) ORDER BY REFRESH_END_TIME DESC LIMIT 10
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: INFORMATION_SCHEMA
      outputParameters:
      - name: refresh_history
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → dynamic-table-refresh-status.yml

Retrieves column definitions, data types, and row count for a specified Snowflake table. Useful for data discovery and schema validation.

naftiko: '0.5'
info:
  label: Table Metadata Inspector
  description: Retrieves column definitions, data types, and row count for a specified Snowflake table. Useful for data discovery and schema validation.
  tags:
  - data-governance
  - metadata
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-metadata
    port: 8080
    tools:
    - name: get-table-metadata
      description: Retrieve column names, types, and row count for a Snowflake table.
      inputParameters:
      - name: database
        in: body
        type: string
        description: The Snowflake database containing the table.
      - name: schema
        in: body
        type: string
        description: The schema containing the table.
      - name: table_name
        in: body
        type: string
        description: The table name to inspect.
      call: snowflake.submit-statement
      with:
        statement: DESCRIBE TABLE {{database}}.{{schema}}.{{table_name}}
        warehouse: COMPUTE_WH
        database: '{{database}}'
        schema: '{{schema}}'
      outputParameters:
      - name: columns
        type: array
        mapping: $.data
      - name: query_id
        type: string
        mapping: $.statementHandle
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → table-metadata-inspector.yml

Orchestrates data governance framework pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Governance Framework Pipeline
  description: Orchestrates data governance framework pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - github
  - confluence
  - terraform
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-governance-framework-pipeline
      description: Orchestrates data governance framework pipeline across cloud data platform 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: github.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: terraform.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-governance-framework-pipeline.yml

Orchestrates snowflake native app deployment pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Native App Deployment Pipeline
  description: Orchestrates snowflake native app deployment pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - confluence
  - terraform
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-native-app-deployment-pipeline
      description: Orchestrates snowflake native app deployment pipeline across cloud data platform 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: terraform.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: pagerduty.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/snowflake
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-native-app-deployment-pipeline.yml

Orchestrates snowflake polaris catalog pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Polaris Catalog Pipeline
  description: Orchestrates snowflake polaris catalog pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - slack
  - jira
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-polaris-catalog-pipeline
      description: Orchestrates snowflake polaris catalog pipeline across cloud data platform 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: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.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/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/snowflake
      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/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-polaris-catalog-pipeline.yml

Orchestrates data sharing agreement pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Sharing Agreement Pipeline
  description: Orchestrates data sharing agreement pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - servicenow
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-sharing-agreement-pipeline
      description: Orchestrates data sharing agreement pipeline across cloud data platform 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: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-sharing-agreement-pipeline.yml

Orchestrates data catalog metadata pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Catalog Metadata Pipeline
  description: Orchestrates data catalog metadata pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - jira
  - datadog
  - github
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-catalog-metadata-pipeline
      description: Orchestrates data catalog metadata pipeline across cloud data platform 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: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: github.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      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/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-catalog-metadata-pipeline.yml

Orchestrates data retention policy pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Retention Policy Pipeline
  description: Orchestrates data retention policy pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - salesforce
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-retention-policy-pipeline
      description: Orchestrates data retention policy pipeline across cloud data platform 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: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/data
      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/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-retention-policy-pipeline.yml

Applies a dynamic data masking policy to sensitive columns in a Snowflake table, verifies the policy is active, and logs the governance action to ServiceNow.

naftiko: '0.5'
info:
  label: Data Masking Policy Applier
  description: Applies a dynamic data masking policy to sensitive columns in a Snowflake table, verifies the policy is active, and logs the governance action to ServiceNow.
  tags:
  - data-governance
  - security
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data-masking
    port: 8080
    tools:
    - name: apply-masking-policy
      description: Apply a masking policy to a Snowflake column and log the action in ServiceNow.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified table name.
      - name: column_name
        in: body
        type: string
        description: Column to apply masking to.
      - name: policy_name
        in: body
        type: string
        description: Masking policy name to apply.
      - name: assignment_group
        in: body
        type: string
        description: ServiceNow group for governance logging.
      steps:
      - name: apply-policy
        type: call
        call: snowflake.submit-statement
        with:
          statement: ALTER TABLE {{table_name}} MODIFY COLUMN {{column_name}} SET MASKING POLICY {{policy_name}}
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: verify-policy
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT * FROM TABLE(INFORMATION_SCHEMA.POLICY_REFERENCES(REF_ENTITY_NAME => '{{table_name}}', REF_ENTITY_DOMAIN => 'TABLE'))
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: INFORMATION_SCHEMA
      - name: log-governance-action
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Masking policy applied: {{policy_name}} on {{table_name}}.{{column_name}}'
          description: Dynamic masking policy '{{policy_name}}' applied to column {{column_name}} in table {{table_name}}. Verified active. Applied via automated governance workflow.
          assignment_group: '{{assignment_group}}'
          category: data_governance
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://{{snow_instance}}.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 → data-masking-policy-applier.yml

Orchestrates snowflake feature store pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Feature Store Pipeline
  description: Orchestrates snowflake feature store pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-feature-store-pipeline
      description: Orchestrates snowflake feature store pipeline across cloud data platform 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/snowflake
      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/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-feature-store-pipeline.yml

Creates a new outbound data share in Snowflake, grants select on specified objects, adds a consumer account, and notifies the data product owner via Slack.

naftiko: '0.5'
info:
  label: Cross-Account Data Share Provisioner
  description: Creates a new outbound data share in Snowflake, grants select on specified objects, adds a consumer account, and notifies the data product owner via Slack.
  tags:
  - data-sharing
  - governance
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data-sharing
    port: 8080
    tools:
    - name: provision-data-share
      description: Create an outbound Snowflake data share, add objects, register a consumer, and notify via Slack.
      inputParameters:
      - name: share_name
        in: body
        type: string
        description: Name for the new data share.
      - name: database
        in: body
        type: string
        description: Database containing the objects to share.
      - name: schema
        in: body
        type: string
        description: Schema containing the objects to share.
      - name: table_name
        in: body
        type: string
        description: Table to add to the share.
      - name: consumer_account
        in: body
        type: string
        description: Snowflake account identifier of the consumer.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for share notifications.
      steps:
      - name: create-share
        type: call
        call: snowflake.submit-statement
        with:
          statement: CREATE SHARE IF NOT EXISTS {{share_name}}
          warehouse: ADMIN_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: grant-usage
        type: call
        call: snowflake.submit-statement
        with:
          statement: GRANT USAGE ON DATABASE {{database}} TO SHARE {{share_name}}; GRANT USAGE ON SCHEMA {{database}}.{{schema}} TO SHARE {{share_name}}; GRANT SELECT ON TABLE {{database}}.{{schema}}.{{table_name}} TO SHARE {{share_name}}
          warehouse: ADMIN_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: add-consumer
        type: call
        call: snowflake.submit-statement
        with:
          statement: ALTER SHARE {{share_name}} ADD ACCOUNTS = {{consumer_account}}
          warehouse: ADMIN_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: notify-owner
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: Data Share '{{share_name}}' provisioned. Table {{database}}.{{schema}}.{{table_name}} shared with account {{consumer_account}}.
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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 → cross-account-data-share-provisioner.yml

Retrieves object dependency graph data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Object Dependency Graph
  description: Retrieves object dependency graph data from the Snowflake cloud data platform systems.
  tags:
  - object
  - snowflake
  - graph
capability:
  exposes:
  - type: mcp
    namespace: object
    port: 8080
    tools:
    - name: object-dependency-graph
      description: Retrieves object dependency graph data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.object-dependency-graph
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /object/dependency/graph/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: object-dependency-graph
        method: GET
Open in Framework → View in Fleet → object-dependency-graph.yml

Orchestrates data pipeline dependency pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Pipeline Dependency Pipeline
  description: Orchestrates data pipeline dependency pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - servicenow
  - snowflake
  - salesforce
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-pipeline-dependency-pipeline
      description: Orchestrates data pipeline dependency pipeline across cloud data platform 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: salesforce.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-pipeline-dependency-pipeline.yml

Checks the last update timestamp of critical Snowflake tables against defined SLA thresholds. If stale, creates a PagerDuty incident and logs the SLA breach.

naftiko: '0.5'
info:
  label: Data Freshness SLA Monitor
  description: Checks the last update timestamp of critical Snowflake tables against defined SLA thresholds. If stale, creates a PagerDuty incident and logs the SLA breach.
  tags:
  - data-quality
  - sla
  - snowflake
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: sla-monitor
    port: 8080
    tools:
    - name: check-data-freshness
      description: Verify that a Snowflake table has been updated within its SLA window and alert if stale.
      inputParameters:
      - name: table_name
        in: body
        type: string
        description: Fully qualified table name to check.
      - name: timestamp_column
        in: body
        type: string
        description: Column containing the last-updated timestamp.
      - name: max_age_hours
        in: body
        type: integer
        description: Maximum acceptable age in hours before SLA breach.
      - name: escalation_policy_id
        in: body
        type: string
        description: PagerDuty escalation policy for SLA breaches.
      steps:
      - name: check-freshness
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT MAX({{timestamp_column}}) AS LAST_UPDATED, DATEDIFF(hour, MAX({{timestamp_column}}), CURRENT_TIMESTAMP()) AS AGE_HOURS FROM {{table_name}}
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: 'SLA Breach: {{table_name}} data is {{check-freshness.data[0][1]}} hours old (limit: {{max_age_hours}}h)'
          urgency: high
          escalation_policy_id: '{{escalation_policy_id}}'
          body: 'Table {{table_name}} last updated at {{check-freshness.data[0][0]}}. Current age: {{check-freshness.data[0][1]}} hours. SLA threshold: {{max_age_hours}} hours.'
      - name: log-breach
        type: call
        call: snowflake.submit-statement
        with:
          statement: INSERT INTO OBSERVABILITY.SLA.BREACH_LOG (TABLE_NAME, LAST_UPDATED, AGE_HOURS, THRESHOLD_HOURS, DETECTED_AT) VALUES ('{{table_name}}', '{{check-freshness.data[0][0]}}', {{check-freshness.data[0][1]}}, {{max_age_hours}}, CURRENT_TIMESTAMP())
          warehouse: COMPUTE_WH
          database: OBSERVABILITY
          schema: SLA
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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
Open in Framework → View in Fleet → data-freshness-sla-monitor.yml

Extracts table and column metadata from Snowflake and registers it in an Alation data catalog entry, ensuring discoverability for analysts.

naftiko: '0.5'
info:
  label: Data Catalog Registration
  description: Extracts table and column metadata from Snowflake and registers it in an Alation data catalog entry, ensuring discoverability for analysts.
  tags:
  - data-governance
  - catalog
  - snowflake
  - alation
capability:
  exposes:
  - type: mcp
    namespace: catalog-registration
    port: 8080
    tools:
    - name: register-in-catalog
      description: Extract Snowflake table metadata and register in Alation data catalog.
      inputParameters:
      - name: database
        in: body
        type: string
        description: Snowflake database containing the table.
      - name: schema
        in: body
        type: string
        description: Schema containing the table.
      - name: table_name
        in: body
        type: string
        description: Table to register in the catalog.
      - name: ds_id
        in: body
        type: integer
        description: Alation datasource ID for the Snowflake connection.
      steps:
      - name: get-metadata
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COMMENT FROM {{database}}.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '{{schema}}' AND TABLE_NAME = '{{table_name}}' ORDER BY ORDINAL_POSITION
          warehouse: COMPUTE_WH
          database: '{{database}}'
          schema: INFORMATION_SCHEMA
      - name: get-table-comment
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT COMMENT FROM {{database}}.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{{schema}}' AND TABLE_NAME = '{{table_name}}'
          warehouse: COMPUTE_WH
          database: '{{database}}'
          schema: INFORMATION_SCHEMA
      - name: register-table
        type: call
        call: alation.update-table
        with:
          ds_id: '{{ds_id}}'
          schema_name: '{{schema}}'
          table_name: '{{table_name}}'
          description: '{{get-table-comment.data[0][0]}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: alation
    baseUri: https://{{alation_host}}/integration/v2
    authentication:
      type: bearer
      token: $secrets.alation_token
    resources:
    - name: tables
      path: /table
      operations:
      - name: update-table
        method: POST
Open in Framework → View in Fleet → data-catalog-registration.yml

Orchestrates data lineage impact pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Lineage Impact Pipeline
  description: Orchestrates data lineage impact pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - jira
  - datadog
  - github
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-lineage-impact-pipeline
      description: Orchestrates data lineage impact pipeline across cloud data platform 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: datadog.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: github.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      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/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-lineage-impact-pipeline.yml

Orchestrates data collaboration workspace pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Collaboration Workspace Pipeline
  description: Orchestrates data collaboration workspace pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - terraform
  - pagerduty
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-collaboration-workspace-pipeline
      description: Orchestrates data collaboration workspace pipeline across cloud data platform 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: terraform.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: pagerduty.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-collaboration-workspace-pipeline.yml

Retrieves function definition lookup data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Function Definition Lookup
  description: Retrieves function definition lookup data from the Snowflake cloud data platform systems.
  tags:
  - function
  - snowflake
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: function
    port: 8080
    tools:
    - name: function-definition-lookup
      description: Retrieves function definition lookup data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.function-definition-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /function/definition/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: function-definition-lookup
        method: GET
Open in Framework → View in Fleet → function-definition-lookup.yml

Executes a Snowpark Python stored procedure for data transformation, checks the execution result, and posts the outcome to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Snowpark Job Executor and Notifier
  description: Executes a Snowpark Python stored procedure for data transformation, checks the execution result, and posts the outcome to a Microsoft Teams channel.
  tags:
  - data-engineering
  - snowpark
  - snowflake
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: snowpark-execution
    port: 8080
    tools:
    - name: run-snowpark-job
      description: Execute a Snowpark stored procedure and notify Microsoft Teams with the result.
      inputParameters:
      - name: procedure_name
        in: body
        type: string
        description: Fully qualified Snowpark stored procedure name.
      - name: proc_args
        in: body
        type: string
        description: Arguments to pass to the procedure.
      - name: teams_webhook
        in: body
        type: string
        description: Microsoft Teams webhook URL.
      steps:
      - name: execute-proc
        type: call
        call: snowflake.submit-statement
        with:
          statement: CALL {{procedure_name}}({{proc_args}})
          warehouse: ETL_WH
          database: ANALYTICS
          schema: TRANSFORMS
      - name: get-result
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT * FROM TABLE(RESULT_SCAN('{{execute-proc.statementHandle}}'))
          warehouse: ETL_WH
          database: ANALYTICS
          schema: TRANSFORMS
      - name: notify-teams
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'Snowpark Job Complete: {{procedure_name}} finished. Query ID: {{execute-proc.statementHandle}}. Status: {{execute-proc.status}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://outlook.office.com/webhook
    authentication:
      type: none
    resources:
    - name: webhook
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → snowpark-job-executor-and-notifier.yml

Orchestrates data clean room setup pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Clean Room Setup Pipeline
  description: Orchestrates data clean room setup pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - salesforce
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-clean-room-setup-pipeline
      description: Orchestrates data clean room setup pipeline across cloud data platform 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: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/data
      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/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-clean-room-setup-pipeline.yml

Executes a SQL statement against a specified Snowflake warehouse and returns the query results. Used by analysts and data engineers for ad-hoc queries without needing a local client.

naftiko: '0.5'
info:
  label: Warehouse Query Executor
  description: Executes a SQL statement against a specified Snowflake warehouse and returns the query results. Used by analysts and data engineers for ad-hoc queries without needing a local client.
  tags:
  - data-warehousing
  - sql
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-query
    port: 8080
    tools:
    - name: execute-query
      description: Submit a SQL statement to a Snowflake warehouse and return the result set.
      inputParameters:
      - name: warehouse
        in: body
        type: string
        description: The Snowflake virtual warehouse name to use for compute.
      - name: database
        in: body
        type: string
        description: The Snowflake database to query against.
      - name: schema
        in: body
        type: string
        description: The schema within the database.
      - name: statement
        in: body
        type: string
        description: The SQL statement to execute.
      call: snowflake.submit-statement
      with:
        warehouse: '{{warehouse}}'
        database: '{{database}}'
        schema: '{{schema}}'
        statement: '{{statement}}'
      outputParameters:
      - name: query_id
        type: string
        mapping: $.statementHandle
      - name: rows
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → warehouse-query-executor.yml

Generates a comprehensive account usage report from Snowflake covering storage, compute, and user activity, then emails the report to stakeholders via SendGrid.

naftiko: '0.5'
info:
  label: Snowflake Account Usage Report Generator
  description: Generates a comprehensive account usage report from Snowflake covering storage, compute, and user activity, then emails the report to stakeholders via SendGrid.
  tags:
  - platform
  - reporting
  - snowflake
  - sendgrid
capability:
  exposes:
  - type: mcp
    namespace: usage-reporting
    port: 8080
    tools:
    - name: generate-usage-report
      description: Compile Snowflake account usage metrics and email the report.
      inputParameters:
      - name: report_month
        in: body
        type: string
        description: Month for the report in YYYY-MM format.
      - name: recipient_emails
        in: body
        type: string
        description: Comma-separated email addresses for report delivery.
      steps:
      - name: get-storage
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT DATABASE_NAME, AVERAGE_DATABASE_BYTES / POWER(1024,3) AS AVG_GB FROM SNOWFLAKE.ACCOUNT_USAGE.DATABASE_STORAGE_USAGE_HISTORY WHERE USAGE_DATE >= '{{report_month}}-01' AND USAGE_DATE < DATEADD(month, 1, '{{report_month}}-01') GROUP BY DATABASE_NAME ORDER BY AVG_GB DESC
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: get-compute
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT WAREHOUSE_NAME, SUM(CREDITS_USED) AS TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME >= '{{report_month}}-01' AND START_TIME < DATEADD(month, 1, '{{report_month}}-01') GROUP BY WAREHOUSE_NAME ORDER BY TOTAL_CREDITS DESC
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: get-active-users
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT COUNT(DISTINCT USER_NAME) AS ACTIVE_USERS FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY WHERE EVENT_TIMESTAMP >= '{{report_month}}-01' AND EVENT_TIMESTAMP < DATEADD(month, 1, '{{report_month}}-01') AND IS_SUCCESS = 'YES'
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: send-report
        type: call
        call: sendgrid.send-email
        with:
          to: '{{recipient_emails}}'
          subject: Snowflake Account Usage Report - {{report_month}}
          body: 'Monthly Snowflake Report for {{report_month}}. Active Users: {{get-active-users.data[0][0]}}. Top warehouse credits and storage details attached.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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 → snowflake-account-usage-report-generator.yml

Lists all role grants for a given Snowflake user, returning role names and granted privileges. Used by security teams for access auditing.

naftiko: '0.5'
info:
  label: Database Role Grant Viewer
  description: Lists all role grants for a given Snowflake user, returning role names and granted privileges. Used by security teams for access auditing.
  tags:
  - security
  - governance
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-security
    port: 8080
    tools:
    - name: list-user-grants
      description: Show all roles and privileges granted to a Snowflake user.
      inputParameters:
      - name: username
        in: body
        type: string
        description: The Snowflake username to audit.
      call: snowflake.submit-statement
      with:
        statement: SHOW GRANTS TO USER {{username}}
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: grants
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → database-role-grant-viewer.yml

Retrieves materialized view refresh status data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Materialized View Refresh Status
  description: Retrieves materialized view refresh status data from the Snowflake cloud data platform systems.
  tags:
  - materialized
  - snowflake
  - status
capability:
  exposes:
  - type: mcp
    namespace: materialized
    port: 8080
    tools:
    - name: materialized-view-refresh-status
      description: Retrieves materialized view refresh status data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.materialized-view-refresh-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /materialized/view/refresh/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: materialized-view-refresh-status
        method: GET
Open in Framework → View in Fleet → materialized-view-refresh-status.yml

Orchestrates snowpark ml pipeline orchestrator across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowpark Ml Pipeline Orchestrator
  description: Orchestrates snowpark ml pipeline orchestrator across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowpark
  - snowflake
  - slack
  - jira
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: snowpark
    port: 8080
    tools:
    - name: snowpark-ml-pipeline-orchestrator
      description: Orchestrates snowpark ml pipeline orchestrator across cloud data platform 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: jira.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: datadog.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/snowpark
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/snowpark
      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/snowpark
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowpark-ml-pipeline-orchestrator.yml

Collects warehouse utilization and query performance metrics from Snowflake and pushes them to a Prometheus Pushgateway for infrastructure dashboarding.

naftiko: '0.5'
info:
  label: Prometheus Metrics Exporter for Snowflake
  description: Collects warehouse utilization and query performance metrics from Snowflake and pushes them to a Prometheus Pushgateway for infrastructure dashboarding.
  tags:
  - observability
  - platform
  - snowflake
  - prometheus
capability:
  exposes:
  - type: mcp
    namespace: metrics-export
    port: 8080
    tools:
    - name: export-snowflake-metrics
      description: Collect Snowflake warehouse and query metrics and push them to Prometheus.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: Warehouse to collect metrics for.
      - name: prometheus_job
        in: body
        type: string
        description: Prometheus job name for the pushgateway.
      steps:
      - name: get-warehouse-metrics
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT WAREHOUSE_NAME, AVG(AVG_RUNNING) AS AVG_RUNNING, AVG(AVG_QUEUED_LOAD) AS AVG_QUEUED, SUM(CREDITS_USED) AS TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_LOAD_HISTORY WHERE WAREHOUSE_NAME = '{{warehouse_name}}' AND START_TIME >= DATEADD(hours, -1, CURRENT_TIMESTAMP()) GROUP BY WAREHOUSE_NAME
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: push-metrics
        type: call
        call: prometheus.push-metrics
        with:
          job: '{{prometheus_job}}'
          metrics: 'snowflake_warehouse_avg_running {{get-warehouse-metrics.data[0][1]}}

            snowflake_warehouse_avg_queued {{get-warehouse-metrics.data[0][2]}}

            snowflake_warehouse_credits_used {{get-warehouse-metrics.data[0][3]}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: prometheus
    baseUri: https://{{pushgateway_host}}
    authentication:
      type: basic
      username: $secrets.prometheus_user
      password: $secrets.prometheus_password
    resources:
    - name: metrics
      path: /metrics/job/{{job}}
      inputParameters:
      - name: job
        in: path
      operations:
      - name: push-metrics
        method: POST
Open in Framework → View in Fleet → prometheus-metrics-exporter-for-snowflake.yml

Discovers untagged columns in a Snowflake schema using Cortex data classification, applies recommended sensitivity tags, and reports results to a Slack governance channel.

naftiko: '0.5'
info:
  label: Automated Snowflake Tag Propagation
  description: Discovers untagged columns in a Snowflake schema using Cortex data classification, applies recommended sensitivity tags, and reports results to a Slack governance channel.
  tags:
  - data-governance
  - classification
  - cortex
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: auto-tagging
    port: 8080
    tools:
    - name: auto-classify-columns
      description: Run Cortex classification on untagged columns and apply sensitivity tags.
      inputParameters:
      - name: database
        in: body
        type: string
        description: Snowflake database to scan.
      - name: schema
        in: body
        type: string
        description: Schema to scan for untagged columns.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for classification reports.
      steps:
      - name: run-classification
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT EXTRACT_SEMANTIC_CATEGORIES('{{database}}.{{schema}}')
          warehouse: ML_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: apply-tags
        type: call
        call: snowflake.submit-statement
        with:
          statement: CALL ASSOCIATE_SEMANTIC_CATEGORY_TAGS('{{database}}.{{schema}}', {{run-classification.data[0][0]}})
          warehouse: ML_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: report-results
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Auto-Classification Complete: Schema {{database}}.{{schema}} scanned. Sensitivity tags applied via Cortex classification. Review tag assignments in Snowflake.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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 → automated-snowflake-tag-propagation.yml

Retrieves storage integration status data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Storage Integration Status
  description: Retrieves storage integration status data from the Snowflake cloud data platform systems.
  tags:
  - storage
  - snowflake
  - status
capability:
  exposes:
  - type: mcp
    namespace: storage
    port: 8080
    tools:
    - name: storage-integration-status
      description: Retrieves storage integration status data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.storage-integration-status
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /storage/integration/status/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: storage-integration-status
        method: GET
Open in Framework → View in Fleet → storage-integration-status.yml

Orchestrates iceberg table migration pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Iceberg Table Migration Pipeline
  description: Orchestrates iceberg table migration pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - iceberg
  - snowflake
  - pagerduty
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: iceberg
    port: 8080
    tools:
    - name: iceberg-table-migration-pipeline
      description: Orchestrates iceberg table migration pipeline across cloud data platform 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: pagerduty.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/iceberg
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/iceberg
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/iceberg
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → iceberg-table-migration-pipeline.yml

Orchestrates warehouse cost optimization pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Warehouse Cost Optimization Pipeline
  description: Orchestrates warehouse cost optimization pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - warehouse
  - snowflake
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: warehouse
    port: 8080
    tools:
    - name: warehouse-cost-optimization-pipeline
      description: Orchestrates warehouse cost optimization pipeline across cloud data platform 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/warehouse
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/warehouse
      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/warehouse
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → warehouse-cost-optimization-pipeline.yml

Reads Snowflake warehouse and database configurations, generates a Terraform state comparison, and opens a GitHub pull request when drift is detected.

naftiko: '0.5'
info:
  label: Terraform Snowflake Resource Sync
  description: Reads Snowflake warehouse and database configurations, generates a Terraform state comparison, and opens a GitHub pull request when drift is detected.
  tags:
  - platform
  - infrastructure
  - snowflake
  - terraform
  - github
capability:
  exposes:
  - type: mcp
    namespace: infra-drift
    port: 8080
    tools:
    - name: detect-snowflake-drift
      description: Compare live Snowflake resource configuration to Terraform state and create a GitHub PR for drift remediation.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: Snowflake warehouse to inspect.
      - name: repo_owner
        in: body
        type: string
        description: GitHub repository owner.
      - name: repo_name
        in: body
        type: string
        description: GitHub repository name containing Terraform configs.
      - name: branch_name
        in: body
        type: string
        description: Branch name for the drift-fix PR.
      steps:
      - name: get-warehouse-config
        type: call
        call: snowflake.submit-statement
        with:
          statement: SHOW WAREHOUSES LIKE '{{warehouse_name}}'
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: get-tf-file
        type: call
        call: github.get-content
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          path: snowflake/warehouses/{{warehouse_name}}.tf
      - name: create-pr
        type: call
        call: github.create-pull-request
        with:
          owner: '{{repo_owner}}'
          repo: '{{repo_name}}'
          head: '{{branch_name}}'
          base: main
          title: 'Drift detected: Snowflake warehouse {{warehouse_name}}'
          body: 'Live config differs from Terraform. Current warehouse size: {{get-warehouse-config.data[0][3]}}. Review and reconcile.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com/repos
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: contents
      path: /{{owner}}/{{repo}}/contents/{{path}}
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      - name: path
        in: path
      operations:
      - name: get-content
        method: GET
    - name: pulls
      path: /{{owner}}/{{repo}}/pulls
      inputParameters:
      - name: owner
        in: path
      - name: repo
        in: path
      operations:
      - name: create-pull-request
        method: POST
Open in Framework → View in Fleet → terraform-snowflake-resource-sync.yml

Extracts a training dataset from Snowflake, triggers an ML training job on Kubeflow, monitors completion, and registers the model metadata back in a Snowflake model registry table.

naftiko: '0.5'
info:
  label: ML Model Training Pipeline
  description: Extracts a training dataset from Snowflake, triggers an ML training job on Kubeflow, monitors completion, and registers the model metadata back in a Snowflake model registry table.
  tags:
  - machine-learning
  - data-engineering
  - snowflake
  - kubeflow
capability:
  exposes:
  - type: mcp
    namespace: ml-training
    port: 8080
    tools:
    - name: train-model
      description: Extract training data from Snowflake, trigger Kubeflow training, and register the model.
      inputParameters:
      - name: training_query
        in: body
        type: string
        description: SQL query to extract training data from Snowflake.
      - name: experiment_name
        in: body
        type: string
        description: Kubeflow experiment name.
      - name: pipeline_id
        in: body
        type: string
        description: Kubeflow pipeline ID to execute.
      - name: model_name
        in: body
        type: string
        description: Name for the trained model.
      steps:
      - name: extract-data
        type: call
        call: snowflake.submit-statement
        with:
          statement: '{{training_query}}'
          warehouse: ML_WH
          database: ANALYTICS
          schema: ML
      - name: trigger-training
        type: call
        call: kubeflow.create-run
        with:
          experiment_name: '{{experiment_name}}'
          pipeline_id: '{{pipeline_id}}'
          params: '{"query_id": "{{extract-data.statementHandle}}"}'
      - name: register-model
        type: call
        call: snowflake.submit-statement
        with:
          statement: INSERT INTO ANALYTICS.ML.MODEL_REGISTRY (MODEL_NAME, TRAINING_RUN_ID, QUERY_ID, REGISTERED_AT, STATUS) VALUES ('{{model_name}}', '{{trigger-training.run_id}}', '{{extract-data.statementHandle}}', CURRENT_TIMESTAMP(), 'TRAINING')
          warehouse: ML_WH
          database: ANALYTICS
          schema: ML
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: kubeflow
    baseUri: https://{{kubeflow_endpoint}}/pipeline/apis/v1beta1
    authentication:
      type: bearer
      token: $secrets.kubeflow_token
    resources:
    - name: runs
      path: /runs
      operations:
      - name: create-run
        method: POST
Open in Framework → View in Fleet → ml-model-training-pipeline.yml

Retrieves file format definition lookup data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: File Format Definition Lookup
  description: Retrieves file format definition lookup data from the Snowflake cloud data platform systems.
  tags:
  - file
  - snowflake
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: file
    port: 8080
    tools:
    - name: file-format-definition-lookup
      description: Retrieves file format definition lookup data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.file-format-definition-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /file/format/definition/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: file-format-definition-lookup
        method: GET
Open in Framework → View in Fleet → file-format-definition-lookup.yml

Retrieves notification integration config data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Notification Integration Config
  description: Retrieves notification integration config data from the Snowflake cloud data platform systems.
  tags:
  - notification
  - snowflake
  - config
capability:
  exposes:
  - type: mcp
    namespace: notification
    port: 8080
    tools:
    - name: notification-integration-config
      description: Retrieves notification integration config data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.notification-integration-config
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /notification/integration/config/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: notification-integration-config
        method: GET
Open in Framework → View in Fleet → notification-integration-config.yml

Orchestrates snowflake security hardening pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Security Hardening Pipeline
  description: Orchestrates snowflake security hardening pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - datadog
  - github
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-security-hardening-pipeline
      description: Orchestrates snowflake security hardening pipeline across cloud data platform 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: github.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.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/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/snowflake
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-security-hardening-pipeline.yml

Orchestrates dynamic table optimization pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Dynamic Table Optimization Pipeline
  description: Orchestrates dynamic table optimization pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - dynamic
  - snowflake
  - terraform
  - pagerduty
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: dynamic
    port: 8080
    tools:
    - name: dynamic-table-optimization-pipeline
      description: Orchestrates dynamic table optimization pipeline across cloud data platform 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: terraform.execute-1
        with:
          input: '{{input_id}}'
      - name: step-2
        type: call
        call: pagerduty.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: servicenow.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/dynamic
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/dynamic
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/dynamic
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → dynamic-table-optimization-pipeline.yml

Orchestrates data team access governance pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Team Access Governance Pipeline
  description: Orchestrates data team access governance pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - snowflake
  - salesforce
  - slack
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-team-access-governance-pipeline
      description: Orchestrates data team access governance pipeline across cloud data platform 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: salesforce.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: slack.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/data
      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/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-team-access-governance-pipeline.yml

Orchestrates snowpark container deployment pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowpark Container Deployment Pipeline
  description: Orchestrates snowpark container deployment pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowpark
  - snowflake
  - salesforce
  - slack
  - jira
capability:
  exposes:
  - type: mcp
    namespace: snowpark
    port: 8080
    tools:
    - name: snowpark-container-deployment-pipeline
      description: Orchestrates snowpark container deployment pipeline across cloud data platform 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: slack.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: jira.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://snowflake.my.salesforce.com/services/data/v58.0
    authentication:
      type: bearer
      token: $secrets.salesforce_access_token
    resources:
    - name: salesforce-resource
      path: /api/snowpark
      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/snowpark
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: jira
    baseUri: https://snowflake.atlassian.net/rest/api/3
    authentication:
      type: bearer
      token: $secrets.jira_token
    resources:
    - name: jira-resource
      path: /api/snowpark
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowpark-container-deployment-pipeline.yml

Retrieves available listings from the Snowflake Marketplace for a given search term. Helps data teams discover shared datasets.

naftiko: '0.5'
info:
  label: Listing Viewer for Data Marketplace
  description: Retrieves available listings from the Snowflake Marketplace for a given search term. Helps data teams discover shared datasets.
  tags:
  - data-sharing
  - marketplace
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-marketplace
    port: 8080
    tools:
    - name: search-listings
      description: Search Snowflake Marketplace listings by keyword.
      inputParameters:
      - name: search_term
        in: body
        type: string
        description: Keyword to search for in marketplace listings.
      call: snowflake.submit-statement
      with:
        statement: SELECT * FROM SNOWFLAKE.DATA_SHARING_USAGE.LISTING_CONSUMPTION_DAILY WHERE LISTING_NAME ILIKE '%{{search_term}}%' LIMIT 25
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: DATA_SHARING_USAGE
      outputParameters:
      - name: listings
        type: array
        mapping: $.data
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → listing-viewer-for-data-marketplace.yml

Detects recent DDL changes in Snowflake by querying the query history for ALTER and CREATE statements, then posts a summary to a Confluence page for change management documentation.

naftiko: '0.5'
info:
  label: Snowflake Schema Change Tracker
  description: Detects recent DDL changes in Snowflake by querying the query history for ALTER and CREATE statements, then posts a summary to a Confluence page for change management documentation.
  tags:
  - data-governance
  - change-management
  - snowflake
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: schema-changes
    port: 8080
    tools:
    - name: track-schema-changes
      description: Detect recent DDL changes in Snowflake and document them in Confluence.
      inputParameters:
      - name: database
        in: body
        type: string
        description: Snowflake database to audit for DDL changes.
      - name: hours_back
        in: body
        type: integer
        description: Number of hours to look back.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID to update with change log.
      steps:
      - name: find-ddl-changes
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT QUERY_TEXT, USER_NAME, START_TIME, QUERY_TYPE FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE DATABASE_NAME = '{{database}}' AND QUERY_TYPE IN ('CREATE_TABLE', 'ALTER_TABLE', 'DROP_TABLE', 'CREATE_VIEW', 'ALTER_VIEW') AND START_TIME >= DATEADD(hours, -{{hours_back}}, CURRENT_TIMESTAMP()) ORDER BY START_TIME DESC
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: update-confluence
        type: call
        call: confluence.update-page
        with:
          page_id: '{{confluence_page_id}}'
          title: Snowflake Schema Changes - {{database}}
          body: 'DDL changes detected in the last {{hours_back}} hours: {{find-ddl-changes.data.length}} statements found. Most recent: {{find-ddl-changes.data[0][0]}} by {{find-ddl-changes.data[0][1]}} at {{find-ddl-changes.data[0][2]}}.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://{{confluence_domain}}.atlassian.net/wiki/api/v2
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: pages
      path: /pages/{{page_id}}
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: update-page
        method: PUT
Open in Framework → View in Fleet → snowflake-schema-change-tracker.yml

Retrieves the copy history for a Snowpipe, showing recently ingested files, row counts, and any load errors. Used to monitor continuous data ingestion.

naftiko: '0.5'
info:
  label: Snowpipe Ingestion Status
  description: Retrieves the copy history for a Snowpipe, showing recently ingested files, row counts, and any load errors. Used to monitor continuous data ingestion.
  tags:
  - data-engineering
  - ingestion
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-snowpipe
    port: 8080
    tools:
    - name: get-pipe-status
      description: Fetch the recent copy history for a Snowpipe to check ingestion status.
      inputParameters:
      - name: pipe_name
        in: body
        type: string
        description: Fully qualified Snowpipe name (database.schema.pipe).
      call: snowflake.submit-statement
      with:
        statement: SELECT * FROM TABLE(INFORMATION_SCHEMA.COPY_HISTORY(PIPE_NAME => '{{pipe_name}}', START_TIME => DATEADD(hours, -24, CURRENT_TIMESTAMP()))) ORDER BY LAST_LOAD_TIME DESC
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: load_history
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → snowpipe-ingestion-status.yml

After Snowflake transformations complete, triggers a Tableau extract refresh and notifies the analytics team in Microsoft Teams that fresh data is available.

naftiko: '0.5'
info:
  label: BI Dashboard Refresh Trigger
  description: After Snowflake transformations complete, triggers a Tableau extract refresh and notifies the analytics team in Microsoft Teams that fresh data is available.
  tags:
  - analytics
  - bi
  - snowflake
  - tableau
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: bi-refresh
    port: 8080
    tools:
    - name: refresh-tableau-extract
      description: Trigger a Tableau extract refresh after Snowflake data updates and notify the team.
      inputParameters:
      - name: datasource_id
        in: body
        type: string
        description: Tableau datasource ID to refresh.
      - name: site_id
        in: body
        type: string
        description: Tableau site ID.
      - name: teams_webhook
        in: body
        type: string
        description: Microsoft Teams webhook URL for notifications.
      steps:
      - name: trigger-refresh
        type: call
        call: tableau.refresh-datasource
        with:
          site_id: '{{site_id}}'
          datasource_id: '{{datasource_id}}'
      - name: notify-teams
        type: call
        call: msteams.post-webhook
        with:
          webhook_url: '{{teams_webhook}}'
          text: 'Tableau datasource {{datasource_id}} refresh triggered. Job ID: {{trigger-refresh.job.id}}. Fresh Snowflake data will be available shortly.'
  consumes:
  - type: http
    namespace: tableau
    baseUri: https://{{tableau_server}}/api/3.21/sites/{{site_id}}
    authentication:
      type: bearer
      token: $secrets.tableau_token
    inputParameters:
    - name: site_id
      in: path
    resources:
    - name: datasources
      path: /datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://outlook.office.com/webhook
    authentication:
      type: none
    resources:
    - name: webhook
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: post-webhook
        method: POST
Open in Framework → View in Fleet → bi-dashboard-refresh-trigger.yml

Queries Snowflake login history for a user or across the account to detect anomalous access patterns. Used by security teams for compliance audits.

naftiko: '0.5'
info:
  label: Login History Auditor
  description: Queries Snowflake login history for a user or across the account to detect anomalous access patterns. Used by security teams for compliance audits.
  tags:
  - security
  - compliance
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-audit
    port: 8080
    tools:
    - name: get-login-history
      description: Retrieve recent login attempts from Snowflake for a specific user or all users.
      inputParameters:
      - name: username
        in: body
        type: string
        description: The Snowflake username to audit. Use ALL for all users.
      - name: hours_back
        in: body
        type: integer
        description: Number of hours back to search.
      call: snowflake.submit-statement
      with:
        statement: SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY WHERE EVENT_TIMESTAMP >= DATEADD(hours, -{{hours_back}}, CURRENT_TIMESTAMP()) AND (USER_NAME = '{{username}}' OR '{{username}}' = 'ALL') ORDER BY EVENT_TIMESTAMP DESC LIMIT 100
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: login_records
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → login-history-auditor.yml

Invokes a Snowflake Cortex ML forecast function on a time-series table and returns predicted values. Used by analytics teams for demand or revenue forecasting.

naftiko: '0.5'
info:
  label: Cortex ML Forecast Runner
  description: Invokes a Snowflake Cortex ML forecast function on a time-series table and returns predicted values. Used by analytics teams for demand or revenue forecasting.
  tags:
  - machine-learning
  - cortex
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-cortex
    port: 8080
    tools:
    - name: run-forecast
      description: Execute a Snowflake Cortex ML forecast on a time-series dataset and return predictions.
      inputParameters:
      - name: model_name
        in: body
        type: string
        description: The name of the trained forecast model.
      - name: forecast_horizon
        in: body
        type: integer
        description: Number of periods to forecast ahead.
      call: snowflake.submit-statement
      with:
        statement: CALL {{model_name}}!FORECAST(FORECASTING_PERIODS => {{forecast_horizon}})
        warehouse: ML_WH
        database: ANALYTICS
        schema: ML_MODELS
      outputParameters:
      - name: predictions
        type: array
        mapping: $.data
      - name: query_id
        type: string
        mapping: $.statementHandle
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → cortex-ml-forecast-runner.yml

Orchestrates data privacy classification pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Data Privacy Classification Pipeline
  description: Orchestrates data privacy classification pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - data
  - snowflake
  - confluence
  - terraform
  - pagerduty
capability:
  exposes:
  - type: mcp
    namespace: data
    port: 8080
    tools:
    - name: data-privacy-classification-pipeline
      description: Orchestrates data privacy classification pipeline across cloud data platform 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: terraform.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: pagerduty.execute-3
        with:
          input: '{{input_id}}'
  consumes:
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/data
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: terraform
    baseUri: https://app.terraform.io/api/v2
    authentication:
      type: bearer
      token: $secrets.terraform_token
    resources:
    - name: terraform-resource
      path: /api/data
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/data
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → data-privacy-classification-pipeline.yml

Creates or updates a Snowflake network policy with allowed IP ranges, applies it to the account, and logs the change in ServiceNow for audit.

naftiko: '0.5'
info:
  label: Network Policy Enforcer
  description: Creates or updates a Snowflake network policy with allowed IP ranges, applies it to the account, and logs the change in ServiceNow for audit.
  tags:
  - security
  - network
  - snowflake
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: network-security
    port: 8080
    tools:
    - name: enforce-network-policy
      description: Create a Snowflake network policy with allowed IPs and log to ServiceNow.
      inputParameters:
      - name: policy_name
        in: body
        type: string
        description: Name for the network policy.
      - name: allowed_ips
        in: body
        type: string
        description: Comma-separated list of allowed IP addresses or CIDR ranges.
      - name: assignment_group
        in: body
        type: string
        description: ServiceNow group for change management.
      steps:
      - name: create-policy
        type: call
        call: snowflake.submit-statement
        with:
          statement: CREATE OR REPLACE NETWORK POLICY {{policy_name}} ALLOWED_IP_LIST = ({{allowed_ips}})
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: apply-policy
        type: call
        call: snowflake.submit-statement
        with:
          statement: ALTER ACCOUNT SET NETWORK_POLICY = {{policy_name}}
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: log-change
        type: call
        call: servicenow.create-change
        with:
          short_description: Snowflake network policy '{{policy_name}}' applied to account
          description: 'Network policy {{policy_name}} created with allowed IPs: {{allowed_ips}}. Applied at account level.'
          assignment_group: '{{assignment_group}}'
          category: network_security
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://{{snow_instance}}.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
Open in Framework → View in Fleet → network-policy-enforcer.yml

Retrieves api integration config data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Api Integration Config
  description: Retrieves api integration config data from the Snowflake cloud data platform systems.
  tags:
  - api
  - snowflake
  - config
capability:
  exposes:
  - type: mcp
    namespace: api
    port: 8080
    tools:
    - name: api-integration-config
      description: Retrieves api integration config data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.api-integration-config
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /api/integration/config/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: api-integration-config
        method: GET
Open in Framework → View in Fleet → api-integration-config.yml

Checks the replication status of a Snowflake failover group across regions and alerts the platform team in Slack if replication lag exceeds thresholds.

naftiko: '0.5'
info:
  label: Snowflake Replication Group Monitor
  description: Checks the replication status of a Snowflake failover group across regions and alerts the platform team in Slack if replication lag exceeds thresholds.
  tags:
  - platform
  - disaster-recovery
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: replication-monitor
    port: 8080
    tools:
    - name: check-replication-lag
      description: Monitor Snowflake replication group lag and alert on threshold breach.
      inputParameters:
      - name: replication_group
        in: body
        type: string
        description: Name of the Snowflake replication or failover group.
      - name: max_lag_minutes
        in: body
        type: integer
        description: Maximum acceptable replication lag in minutes.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for replication alerts.
      steps:
      - name: check-lag
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT REPLICATION_GROUP_NAME, PHASE, PRIMARY_SNAPSHOT_TIMESTAMP, SECONDARY_SNAPSHOT_TIMESTAMP, DATEDIFF(minute, PRIMARY_SNAPSHOT_TIMESTAMP, SECONDARY_SNAPSHOT_TIMESTAMP) AS LAG_MINUTES FROM TABLE(INFORMATION_SCHEMA.REPLICATION_GROUP_REFRESH_PROGRESS('{{replication_group}}'))
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: INFORMATION_SCHEMA
      - name: alert-if-lagging
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Replication Alert: Group ''{{replication_group}}'' lag is {{check-lag.data[0][4]}} minutes (threshold: {{max_lag_minutes}}m). Phase: {{check-lag.data[0][1]}}. Investigate immediately.'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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 → snowflake-replication-group-monitor.yml

Retrieves pipe copy history data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Pipe Copy History
  description: Retrieves pipe copy history data from the Snowflake cloud data platform systems.
  tags:
  - pipe
  - snowflake
  - history
capability:
  exposes:
  - type: mcp
    namespace: pipe
    port: 8080
    tools:
    - name: pipe-copy-history
      description: Retrieves pipe copy history data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.pipe-copy-history
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /pipe/copy/history/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: pipe-copy-history
        method: GET
Open in Framework → View in Fleet → pipe-copy-history.yml

Lists all outbound data shares from the Snowflake account with their consumer details and status. Used by data product owners to monitor sharing health.

naftiko: '0.5'
info:
  label: Data Share Status Checker
  description: Lists all outbound data shares from the Snowflake account with their consumer details and status. Used by data product owners to monitor sharing health.
  tags:
  - data-sharing
  - governance
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-sharing
    port: 8080
    tools:
    - name: list-outbound-shares
      description: List all outbound data shares from the current Snowflake account.
      inputParameters:
      - name: share_name_filter
        in: body
        type: string
        description: Optional filter pattern for share names. Use % for all.
      call: snowflake.submit-statement
      with:
        statement: SHOW SHARES LIKE '{{share_name_filter}}'
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: shares
        type: array
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → data-share-status-checker.yml

When an employee is terminated in Workday, disables their Snowflake user account, revokes all role grants, and creates a ServiceNow closure ticket.

naftiko: '0.5'
info:
  label: Automated User Deprovisioning
  description: When an employee is terminated in Workday, disables their Snowflake user account, revokes all role grants, and creates a ServiceNow closure ticket.
  tags:
  - security
  - governance
  - snowflake
  - workday
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: user-deprovisioning
    port: 8080
    tools:
    - name: deprovision-user
      description: Disable a Snowflake user, revoke roles, and log a ServiceNow ticket upon Workday termination.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: Workday employee ID of the terminated user.
      - name: snowflake_username
        in: body
        type: string
        description: Snowflake username to disable.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: disable-user
        type: call
        call: snowflake.submit-statement
        with:
          statement: ALTER USER {{snowflake_username}} SET DISABLED = TRUE
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: revoke-roles
        type: call
        call: snowflake.submit-statement
        with:
          statement: REVOKE ALL PRIVILEGES ON ALL SCHEMAS IN DATABASE ANALYTICS FROM USER {{snowflake_username}}
          warehouse: ADMIN_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: create-closure-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Snowflake access revoked: {{get-employee.full_name}}'
          description: User {{snowflake_username}} ({{get-employee.full_name}}) has been disabled in Snowflake due to termination. All roles revoked.
          category: security
          assigned_group: IAM_Team
  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: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://{{snow_instance}}.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 → automated-user-deprovisioning.yml

Orchestrates snowflake udf testing pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Udf Testing Pipeline
  description: Orchestrates snowflake udf testing pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - datadog
  - github
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-udf-testing-pipeline
      description: Orchestrates snowflake udf testing pipeline across cloud data platform 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: github.execute-2
        with:
          input: '{{input_id}}'
      - name: step-3
        type: call
        call: confluence.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/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: github-resource
      path: /api/snowflake
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://snowflake.atlassian.net/wiki/rest/api
    authentication:
      type: bearer
      token: $secrets.confluence_token
    resources:
    - name: confluence-resource
      path: /api/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-udf-testing-pipeline.yml

Retrieves sequence value lookup data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Sequence Value Lookup
  description: Retrieves sequence value lookup data from the Snowflake cloud data platform systems.
  tags:
  - sequence
  - snowflake
  - lookup
capability:
  exposes:
  - type: mcp
    namespace: sequence
    port: 8080
    tools:
    - name: sequence-value-lookup
      description: Retrieves sequence value lookup data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.sequence-value-lookup
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /sequence/value/lookup/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: sequence-value-lookup
        method: GET
Open in Framework → View in Fleet → sequence-value-lookup.yml

Extracts curated data from Snowflake and writes it to a PostgreSQL operational database for application use. Logs the sync status back to Snowflake.

naftiko: '0.5'
info:
  label: Snowflake to PostgreSQL Reverse ETL
  description: Extracts curated data from Snowflake and writes it to a PostgreSQL operational database for application use. Logs the sync status back to Snowflake.
  tags:
  - data-integration
  - reverse-etl
  - snowflake
  - postgresql
capability:
  exposes:
  - type: mcp
    namespace: reverse-etl
    port: 8080
    tools:
    - name: sync-to-postgres
      description: Extract data from Snowflake and upsert into a PostgreSQL table.
      inputParameters:
      - name: source_query
        in: body
        type: string
        description: SQL query to extract data from Snowflake.
      - name: pg_table
        in: body
        type: string
        description: Target PostgreSQL table name.
      - name: database
        in: body
        type: string
        description: Snowflake source database.
      steps:
      - name: extract-from-snowflake
        type: call
        call: snowflake.submit-statement
        with:
          statement: '{{source_query}}'
          warehouse: ETL_WH
          database: '{{database}}'
          schema: PUBLIC
      - name: upsert-to-postgres
        type: call
        call: postgres.execute-query
        with:
          query: INSERT INTO {{pg_table}} SELECT * FROM staging_data ON CONFLICT DO UPDATE
      - name: log-sync
        type: call
        call: snowflake.submit-statement
        with:
          statement: INSERT INTO {{database}}.PUBLIC.REVERSE_ETL_LOG (SYNC_TIME, TARGET_TABLE, QUERY_ID, STATUS) VALUES (CURRENT_TIMESTAMP(), '{{pg_table}}', '{{extract-from-snowflake.statementHandle}}', 'SUCCESS')
          warehouse: ETL_WH
          database: '{{database}}'
          schema: PUBLIC
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: postgres
    baseUri: https://{{pg_rest_host}}/api/v1
    authentication:
      type: bearer
      token: $secrets.pg_rest_token
    resources:
    - name: query
      path: /query
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → snowflake-to-postgresql-reverse-etl.yml

Orchestrates snowflake usage chargeback pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.

naftiko: '0.5'
info:
  label: Snowflake Usage Chargeback Pipeline
  description: Orchestrates snowflake usage chargeback pipeline across cloud data platform systems, coordinating multiple services and notifying stakeholders.
  tags:
  - snowflake
  - snowflake
  - pagerduty
  - servicenow
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake
    port: 8080
    tools:
    - name: snowflake-usage-chargeback-pipeline
      description: Orchestrates snowflake usage chargeback pipeline across cloud data platform 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: pagerduty.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: pagerduty
    baseUri: https://api.pagerduty.com
    authentication:
      type: bearer
      token: $secrets.pagerduty_token
    resources:
    - name: pagerduty-resource
      path: /api/snowflake
      operations:
      - name: execute-1
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://snowflake.service-now.com/api/now
    authentication:
      type: bearer
      token: $secrets.servicenow_token
    resources:
    - name: servicenow-resource
      path: /api/snowflake
      operations:
      - name: execute-2
        method: POST
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: snowflake-resource
      path: /api/snowflake
      operations:
      - name: execute-3
        method: POST
Open in Framework → View in Fleet → snowflake-usage-chargeback-pipeline.yml

Exports search-optimized data from a Snowflake table and bulk-indexes it into Elasticsearch for full-text search capabilities.

naftiko: '0.5'
info:
  label: Elasticsearch Index from Snowflake
  description: Exports search-optimized data from a Snowflake table and bulk-indexes it into Elasticsearch for full-text search capabilities.
  tags:
  - data-integration
  - search
  - snowflake
  - elasticsearch
capability:
  exposes:
  - type: mcp
    namespace: es-indexing
    port: 8080
    tools:
    - name: index-snowflake-data
      description: Query Snowflake for search data and bulk-index results into Elasticsearch.
      inputParameters:
      - name: source_query
        in: body
        type: string
        description: SQL query to extract data for indexing.
      - name: index_name
        in: body
        type: string
        description: Elasticsearch index name.
      - name: database
        in: body
        type: string
        description: Snowflake database context.
      steps:
      - name: extract-data
        type: call
        call: snowflake.submit-statement
        with:
          statement: '{{source_query}}'
          warehouse: ETL_WH
          database: '{{database}}'
          schema: PUBLIC
      - name: bulk-index
        type: call
        call: elasticsearch.bulk-index
        with:
          index: '{{index_name}}'
          body: '{{extract-data.data}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
  - type: http
    namespace: elasticsearch
    baseUri: https://{{es_host}}:9200
    authentication:
      type: basic
      username: $secrets.es_user
      password: $secrets.es_password
    resources:
    - name: bulk
      path: /{{index}}/_bulk
      inputParameters:
      - name: index
        in: path
      operations:
      - name: bulk-index
        method: POST
Open in Framework → View in Fleet → elasticsearch-index-from-snowflake.yml

Unloads query results from a Snowflake table to an AWS S3 bucket as Parquet files, then logs the export metadata to a Snowflake audit table.

naftiko: '0.5'
info:
  label: Snowflake to S3 Data Export Orchestrator
  description: Unloads query results from a Snowflake table to an AWS S3 bucket as Parquet files, then logs the export metadata to a Snowflake audit table.
  tags:
  - data-engineering
  - data-export
  - snowflake
  - aws-s3
capability:
  exposes:
  - type: mcp
    namespace: data-export
    port: 8080
    tools:
    - name: export-to-s3
      description: Unload Snowflake query results to S3 as Parquet and log the export.
      inputParameters:
      - name: source_query
        in: body
        type: string
        description: SQL query defining the data to export.
      - name: s3_path
        in: body
        type: string
        description: S3 destination path (e.g., s3://bucket/prefix/).
      - name: database
        in: body
        type: string
        description: Snowflake database context.
      - name: schema
        in: body
        type: string
        description: Snowflake schema context.
      steps:
      - name: unload-data
        type: call
        call: snowflake.submit-statement
        with:
          statement: COPY INTO '{{s3_path}}' FROM ({{source_query}}) STORAGE_INTEGRATION = S3_INTEGRATION FILE_FORMAT = (TYPE = PARQUET) OVERWRITE = TRUE HEADER = TRUE
          warehouse: ETL_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: log-export
        type: call
        call: snowflake.submit-statement
        with:
          statement: INSERT INTO {{database}}.{{schema}}.EXPORT_AUDIT_LOG (EXPORT_TIME, QUERY_ID, S3_PATH, ROW_COUNT) SELECT CURRENT_TIMESTAMP(), '{{unload-data.statementHandle}}', '{{s3_path}}', ROWS_PRODUCED FROM TABLE(RESULT_SCAN('{{unload-data.statementHandle}}'))
          warehouse: ETL_WH
          database: '{{database}}'
          schema: '{{schema}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → snowflake-to-s3-data-export-orchestrator.yml

Queries Snowflake account usage views to report warehouse credit consumption for a given date range. Used by FinOps teams to monitor cloud spend.

naftiko: '0.5'
info:
  label: Credit Usage Reporter
  description: Queries Snowflake account usage views to report warehouse credit consumption for a given date range. Used by FinOps teams to monitor cloud spend.
  tags:
  - platform
  - cost-management
  - snowflake
capability:
  exposes:
  - type: mcp
    namespace: snowflake-finops
    port: 8080
    tools:
    - name: get-credit-usage
      description: Retrieve warehouse credit consumption from Snowflake account usage for a specified date range.
      inputParameters:
      - name: start_date
        in: body
        type: string
        description: Start date for the credit usage query in YYYY-MM-DD format.
      - name: end_date
        in: body
        type: string
        description: End date for the credit usage query in YYYY-MM-DD format.
      call: snowflake.submit-statement
      with:
        statement: SELECT WAREHOUSE_NAME, SUM(CREDITS_USED) AS TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME >= '{{start_date}}' AND START_TIME < '{{end_date}}' GROUP BY WAREHOUSE_NAME ORDER BY TOTAL_CREDITS DESC
        warehouse: COMPUTE_WH
        database: SNOWFLAKE
        schema: ACCOUNT_USAGE
      outputParameters:
      - name: credit_data
        type: array
        mapping: $.data
      - name: query_id
        type: string
        mapping: $.statementHandle
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → credit-usage-reporter.yml

Compares current warehouse credit usage against historical averages. When spend exceeds a threshold, sends a Slack alert and logs the anomaly in a Snowflake audit table.

naftiko: '0.5'
info:
  label: Snowflake Cost Anomaly Detector and Notifier
  description: Compares current warehouse credit usage against historical averages. When spend exceeds a threshold, sends a Slack alert and logs the anomaly in a Snowflake audit table.
  tags:
  - cost-management
  - platform
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: cost-anomaly
    port: 8080
    tools:
    - name: detect-cost-anomaly
      description: Compare recent Snowflake credit usage against the historical baseline and alert on anomalies via Slack.
      inputParameters:
      - name: warehouse_name
        in: body
        type: string
        description: Warehouse to monitor for cost anomalies.
      - name: threshold_multiplier
        in: body
        type: number
        description: Multiplier above average that triggers an alert (e.g., 2.0 for 2x average).
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for cost anomaly alerts.
      steps:
      - name: get-recent-usage
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT SUM(CREDITS_USED) AS RECENT_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE WAREHOUSE_NAME = '{{warehouse_name}}' AND START_TIME >= DATEADD(hours, -24, CURRENT_TIMESTAMP())
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: get-baseline
        type: call
        call: snowflake.submit-statement
        with:
          statement: SELECT AVG(DAILY_CREDITS) AS AVG_CREDITS FROM (SELECT DATE_TRUNC('day', START_TIME) AS DAY, SUM(CREDITS_USED) AS DAILY_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE WAREHOUSE_NAME = '{{warehouse_name}}' AND START_TIME >= DATEADD(days, -30, CURRENT_TIMESTAMP()) GROUP BY DAY)
          warehouse: COMPUTE_WH
          database: SNOWFLAKE
          schema: ACCOUNT_USAGE
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Cost Anomaly: Warehouse ''{{warehouse_name}}'' used {{get-recent-usage.data[0][0]}} credits in the last 24h vs {{get-baseline.data[0][0]}} daily average. Threshold multiplier: {{threshold_multiplier}}x.'
      - name: log-anomaly
        type: call
        call: snowflake.submit-statement
        with:
          statement: INSERT INTO OBSERVABILITY.COST.ANOMALY_LOG (DETECTED_AT, WAREHOUSE_NAME, RECENT_CREDITS, BASELINE_CREDITS, THRESHOLD) VALUES (CURRENT_TIMESTAMP(), '{{warehouse_name}}', {{get-recent-usage.data[0][0]}}, {{get-baseline.data[0][0]}}, {{threshold_multiplier}})
          warehouse: COMPUTE_WH
          database: OBSERVABILITY
          schema: COST
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        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 → snowflake-cost-anomaly-detector-and-notifier.yml

Retrieves procedure execution history data from the Snowflake cloud data platform systems.

naftiko: '0.5'
info:
  label: Procedure Execution History
  description: Retrieves procedure execution history data from the Snowflake cloud data platform systems.
  tags:
  - procedure
  - snowflake
  - history
capability:
  exposes:
  - type: mcp
    namespace: procedure
    port: 8080
    tools:
    - name: procedure-execution-history
      description: Retrieves procedure execution history data from the Snowflake cloud data platform systems.
      inputParameters:
      - name: input_id
        in: body
        type: string
        description: The input id.
      call: snowflake.procedure-execution-history
      with:
        input_id: '{{input_id}}'
      outputParameters:
      - name: result
        type: string
        mapping: $.data
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://account.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_token
    resources:
    - name: resource
      path: /procedure/execution/history/{{input_id}}
      inputParameters:
      - name: input_id
        in: path
      operations:
      - name: procedure-execution-history
        method: GET
Open in Framework → View in Fleet → procedure-execution-history.yml

Executes a Snowflake Notebook stored procedure, captures the output, and archives the results in an S3 bucket for compliance retention.

naftiko: '0.5'
info:
  label: Snowflake Notebook Execution and Results Archiver
  description: Executes a Snowflake Notebook stored procedure, captures the output, and archives the results in an S3 bucket for compliance retention.
  tags:
  - data-engineering
  - notebooks
  - snowflake
  - aws-s3
capability:
  exposes:
  - type: mcp
    namespace: notebook-execution
    port: 8080
    tools:
    - name: run-notebook
      description: Execute a Snowflake notebook stored procedure and archive output to S3.
      inputParameters:
      - name: notebook_proc
        in: body
        type: string
        description: Fully qualified stored procedure name for the notebook.
      - name: s3_archive_path
        in: body
        type: string
        description: S3 path for archiving results.
      - name: database
        in: body
        type: string
        description: Database containing the notebook procedure.
      - name: schema
        in: body
        type: string
        description: Schema containing the notebook procedure.
      steps:
      - name: execute-notebook
        type: call
        call: snowflake.submit-statement
        with:
          statement: CALL {{notebook_proc}}()
          warehouse: ML_WH
          database: '{{database}}'
          schema: '{{schema}}'
      - name: archive-results
        type: call
        call: snowflake.submit-statement
        with:
          statement: COPY INTO '{{s3_archive_path}}/{{execute-notebook.statementHandle}}/' FROM (SELECT * FROM TABLE(RESULT_SCAN('{{execute-notebook.statementHandle}}'))) FILE_FORMAT = (TYPE = JSON) STORAGE_INTEGRATION = S3_INTEGRATION OVERWRITE = TRUE
          warehouse: ML_WH
          database: '{{database}}'
          schema: '{{schema}}'
  consumes:
  - type: http
    namespace: snowflake
    baseUri: https://{{account_identifier}}.snowflakecomputing.com/api/v2
    authentication:
      type: bearer
      token: $secrets.snowflake_jwt
    resources:
    - name: statements
      path: /statements
      operations:
      - name: submit-statement
        method: POST
Open in Framework → View in Fleet → snowflake-notebook-execution-and-results-archiver.yml

Returns the current status and pending step of a Workday business process instance, useful for tracking approvals and workflow progress.

naftiko: '0.5'
info:
  label: Business Process Status Check
  description: Returns the current status and pending step of a Workday business process instance, useful for tracking approvals and workflow progress.
  tags:
  - platform
  - workflow
  - workday
capability:
  exposes:
  - type: mcp
    namespace: platform-bpm
    port: 8080
    tools:
    - name: get-business-process-status
      description: Check the status of a Workday business process by instance ID. Returns overall status, current step, and assigned approver.
      inputParameters:
      - name: process_instance_id
        in: body
        type: string
        description: The Workday business process instance ID.
      call: workday.get-bp-status
      with:
        instance_id: '{{process_instance_id}}'
      outputParameters:
      - name: overall_status
        type: string
        mapping: $.overallStatus
      - name: current_step
        type: string
        mapping: $.currentStep.name
      - name: assigned_to
        type: string
        mapping: $.currentStep.assignedTo
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: business-processes
      path: /businessProcesses/{{instance_id}}/status
      inputParameters:
      - name: instance_id
        in: path
      operations:
      - name: get-bp-status
        method: GET
Open in Framework → View in Fleet → business-process-status-check.yml

On worker termination in Workday, disables the Azure AD account, revokes Okta sessions, creates a ServiceNow offboarding ticket, and notifies the manager in Microsoft Teams.

naftiko: '0.5'
info:
  label: Employee Termination Workflow
  description: On worker termination in Workday, disables the Azure AD account, revokes Okta sessions, creates a ServiceNow offboarding ticket, and notifies the manager in Microsoft Teams.
  tags:
  - hr
  - offboarding
  - workday
  - servicenow
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr-offboarding
    port: 8080
    tools:
    - name: orchestrate-termination
      description: Given a terminated employee ID, disable AD account, revoke Okta sessions, open offboarding ticket, and notify the manager.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID of the terminated worker.
      - name: termination_date
        in: body
        type: string
        description: The effective termination date 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: msgraph.update-user
        with:
          user_id: '{{get-employee.work_email}}'
          accountEnabled: false
      - name: revoke-sessions
        type: call
        call: okta.clear-sessions
        with:
          user_id: '{{get-employee.work_email}}'
      - name: open-offboard-ticket
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Offboarding: {{get-employee.full_name}} — {{termination_date}}'
          category: hr_offboarding
          assigned_group: IT_Offboarding
          description: Recover equipment, revoke building access, archive mailbox for {{get-employee.full_name}}.
      - name: notify-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.manager_email}}'
          text: 'Offboarding initiated for {{get-employee.full_name}} effective {{termination_date}}. IT ticket: {{open-offboard-ticket.number}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.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/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user
        method: PATCH
  - type: http
    namespace: okta
    baseUri: https://workday.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: sessions
      path: /users/{{user_id}}/sessions
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: clear-sessions
        method: DELETE
  - type: http
    namespace: servicenow
    baseUri: https://workday.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 → employee-termination-workflow.yml

Looks up a Workday Financials cost center budget by code and fiscal year, returning allocated budget, spend-to-date, and remaining balance.

naftiko: '0.5'
info:
  label: Cost Center Budget Query
  description: Looks up a Workday Financials cost center budget by code and fiscal year, returning allocated budget, spend-to-date, and remaining balance.
  tags:
  - finance
  - budgeting
  - workday-financials
capability:
  exposes:
  - type: mcp
    namespace: finance-budget
    port: 8080
    tools:
    - name: get-cost-center-budget
      description: Retrieve budget allocation for a Workday cost center and fiscal year. Returns allocated amount, spend-to-date, and remaining balance.
      inputParameters:
      - name: cost_center_code
        in: body
        type: string
        description: The Workday cost center code.
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year in YYYY format.
      call: workday.get-budget
      with:
        cost_center: '{{cost_center_code}}'
        year: '{{fiscal_year}}'
      outputParameters:
      - name: allocated
        type: number
        mapping: $.allocatedBudget
      - name: spent
        type: number
        mapping: $.spendToDate
      - name: remaining
        type: number
        mapping: $.remainingBalance
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: budgets
      path: /financial_management/cost_centers/{{cost_center}}/budgets
      inputParameters:
      - name: cost_center
        in: path
      - name: year
        in: query
      operations:
      - name: get-budget
        method: GET
Open in Framework → View in Fleet → cost-center-budget-query.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.workday.com/communications/v1
    authentication:
      type: bearer
      token: $secrets.workday_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

Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews.

naftiko: '0.5'
info:
  label: Employee Offboarding Orchestrator
  description: Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews.
  tags:
  - hr
  - identity
  - operations
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-employee-offboarding-orchestrator
      description: Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews.
      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 Employee Offboarding Orchestrator for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → employee-offboarding-orchestrator.yml

Retrieves benefit plan details by plan ID.

naftiko: '0.5'
info:
  label: Benefit Plan Details
  description: Retrieves benefit plan details by plan ID.
  tags:
  - hr
  - benefits
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-benefit
      description: Retrieves benefit plan details by plan ID.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The benefit plan details identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: benefit
      path: /benefit/plan/details/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-benefit
        method: GET
Open in Framework → View in Fleet → benefit-plan-details.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Compares Workday payroll results against ADP payroll register for a pay period, identifies discrepancies, and opens a ServiceNow task for payroll ops when variances exceed threshold.

naftiko: '0.5'
info:
  label: Payroll Discrepancy Alert
  description: Compares Workday payroll results against ADP payroll register for a pay period, identifies discrepancies, and opens a ServiceNow task for payroll ops when variances exceed threshold.
  tags:
  - payroll
  - finance
  - workday-payroll
  - adp
  - servicenow
capability:
  exposes:
  - type: mcp
    namespace: payroll-reconciliation
    port: 8080
    tools:
    - name: reconcile-payroll
      description: Compare Workday and ADP payroll totals for a pay period. If variance exceeds threshold, create a ServiceNow task.
      inputParameters:
      - name: pay_period_id
        in: body
        type: string
        description: The Workday pay period identifier.
      - name: adp_payroll_id
        in: body
        type: string
        description: The ADP payroll batch ID.
      - name: variance_threshold
        in: body
        type: number
        description: Maximum acceptable variance in dollars.
      steps:
      - name: get-wd-payroll
        type: call
        call: workday.get-payroll-summary
        with:
          period_id: '{{pay_period_id}}'
      - name: get-adp-payroll
        type: call
        call: adp.get-payroll-summary
        with:
          payroll_id: '{{adp_payroll_id}}'
      - name: open-discrepancy-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'Payroll discrepancy: period {{pay_period_id}}'
          description: 'Workday gross: {{get-wd-payroll.total_gross}}, ADP gross: {{get-adp-payroll.total_gross}}. Variance exceeds ${{variance_threshold}}.'
          assigned_group: Payroll_Operations
          category: payroll_reconciliation
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: payroll-runs
      path: /payroll/runs/{{period_id}}/summary
      inputParameters:
      - name: period_id
        in: path
      operations:
      - name: get-payroll-summary
        method: GET
  - type: http
    namespace: adp
    baseUri: https://api.adp.com/payroll/v1
    authentication:
      type: bearer
      token: $secrets.adp_token
    resources:
    - name: payroll-summaries
      path: /payroll-summaries/{{payroll_id}}
      inputParameters:
      - name: payroll_id
        in: path
      operations:
      - name: get-payroll-summary
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://workday.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 → payroll-discrepancy-alert.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.workday.com/collaboration/v1
    authentication:
      type: bearer
      token: $secrets.workday_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

Retrieves a worker's current time-off balances from Workday, including vacation, sick leave, and personal days remaining.

naftiko: '0.5'
info:
  label: Time Off Balance Check
  description: Retrieves a worker's current time-off balances from Workday, including vacation, sick leave, and personal days remaining.
  tags:
  - hr
  - time-off
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hcm-timeoff
    port: 8080
    tools:
    - name: get-time-off-balance
      description: Check a worker's time-off balances by employee ID. Returns vacation, sick, and personal day balances.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-time-off-balance
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: vacation_hours
        type: number
        mapping: $.balances[?(@.planName=='Vacation')].remainingHours
      - name: sick_hours
        type: number
        mapping: $.balances[?(@.planName=='Sick')].remainingHours
      - name: personal_days
        type: number
        mapping: $.balances[?(@.planName=='Personal')].remainingDays
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: time-off
      path: /workers/{{worker_id}}/timeOffBalances
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-time-off-balance
        method: GET
Open in Framework → View in Fleet → time-off-balance-check.yml

Syncs Workday worker cost center and manager data to SAP Concur to keep expense delegation and approval hierarchies current.

naftiko: '0.5'
info:
  label: Workday to SAP Concur Expense Sync
  description: Syncs Workday worker cost center and manager data to SAP Concur to keep expense delegation and approval hierarchies current.
  tags:
  - finance
  - integrations
  - workday
  - sap-concur
capability:
  exposes:
  - type: mcp
    namespace: concur-sync
    port: 8080
    tools:
    - name: sync-worker-to-concur
      description: Pull worker details from Workday and update their profile in SAP Concur with current cost center and approver.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-employee.manager_id}}'
      - name: update-concur-profile
        type: call
        call: concur.update-user
        with:
          employee_id: '{{employee_id}}'
          cost_center: '{{get-employee.cost_center}}'
          approver_email: '{{get-manager.work_email}}'
          department: '{{get-employee.department}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.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: concur
    baseUri: https://www.concursolutions.com/api/v3.0
    authentication:
      type: bearer
      token: $secrets.concur_token
    resources:
    - name: users
      path: /common/users/{{employee_id}}
      inputParameters:
      - name: employee_id
        in: path
      operations:
      - name: update-user
        method: PUT
Open in Framework → View in Fleet → workday-to-sap-concur-expense-sync.yml

Syncs approved headcount from Workday Adaptive Planning to a Snowflake data warehouse for BI reporting, then triggers a Tableau extract refresh for the executive dashboard.

naftiko: '0.5'
info:
  label: Headcount Planning Sync
  description: Syncs approved headcount from Workday Adaptive Planning to a Snowflake data warehouse for BI reporting, then triggers a Tableau extract refresh for the executive dashboard.
  tags:
  - planning
  - finance
  - workday
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: headcount-sync
    port: 8080
    tools:
    - name: sync-headcount-plan
      description: Pull approved headcount from Workday Adaptive Planning, load into Snowflake, and refresh the Tableau executive dashboard.
      inputParameters:
      - name: plan_name
        in: body
        type: string
        description: The Adaptive Planning plan name.
      - name: version_name
        in: body
        type: string
        description: The approved version name.
      - name: datasource_id
        in: body
        type: string
        description: The Tableau datasource ID to refresh.
      steps:
      - name: get-headcount
        type: call
        call: workday.get-forecast
        with:
          plan: '{{plan_name}}'
          version: '{{version_name}}'
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO HR_ANALYTICS.HEADCOUNT_PLAN (plan, version, headcount, revenue, expense) VALUES ('{{plan_name}}', '{{version_name}}', {{get-headcount.headcount}}, {{get-headcount.total_revenue}}, {{get-headcount.total_expense}})
      - name: refresh-tableau
        type: call
        call: tableau.refresh-datasource
        with:
          datasource_id: '{{datasource_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: forecasts
      path: /planning/forecasts
      inputParameters:
      - name: plan
        in: query
      - name: version
        in: query
      operations:
      - name: get-forecast
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://workday.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: tableau
    baseUri: https://tableau.workday.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/default/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
Open in Framework → View in Fleet → headcount-planning-sync.yml

Pulls procurement spend data from Workday Financials by category and period, loads into Snowflake spend analytics tables, and notifies the procurement lead in Slack.

naftiko: '0.5'
info:
  label: Procurement Spend Analysis
  description: Pulls procurement spend data from Workday Financials by category and period, loads into Snowflake spend analytics tables, and notifies the procurement lead in Slack.
  tags:
  - finance
  - procurement
  - workday-financials
  - snowflake
  - slack
capability:
  exposes:
  - type: mcp
    namespace: spend-analysis
    port: 8080
    tools:
    - name: analyze-procurement-spend
      description: Pull Workday procurement spend by category, load to Snowflake, and notify the procurement lead.
      inputParameters:
      - name: spend_category
        in: body
        type: string
        description: The spend category to analyze.
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period to analyze.
      - name: procurement_channel
        in: body
        type: string
        description: The Slack channel for procurement alerts.
      steps:
      - name: get-spend-data
        type: call
        call: workday.get-procurement-spend
        with:
          category: '{{spend_category}}'
          period: '{{fiscal_period}}'
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO FINANCE.PROCUREMENT_SPEND (category, period, total, supplier_count) VALUES ('{{spend_category}}', '{{fiscal_period}}', {{get-spend-data.total_spend}}, {{get-spend-data.supplier_count}})
      - name: notify-procurement
        type: call
        call: slack.post-message
        with:
          channel: '{{procurement_channel}}'
          text: 'Spend analysis complete for {{spend_category}} — {{fiscal_period}}: ${{get-spend-data.total_spend}} across {{get-spend-data.supplier_count}} suppliers.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: procurement-spend
      path: /financial_management/procurement/spend
      inputParameters:
      - name: category
        in: query
      - name: period
        in: query
      operations:
      - name: get-procurement-spend
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://workday.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: 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 → procurement-spend-analysis.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.workday.com/engineering/v1
    authentication:
      type: bearer
      token: $secrets.workday_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

Fetches Workday expense reports with foreign currency transactions, converts amounts using live exchange rates, and syncs reconciled totals to the finance Smartsheet tracker.

naftiko: '0.5'
info:
  label: Multi-Currency Expense Reconciliation
  description: Fetches Workday expense reports with foreign currency transactions, converts amounts using live exchange rates, and syncs reconciled totals to the finance Smartsheet tracker.
  tags:
  - finance
  - expense
  - workday
  - smartsheet
  - currency
capability:
  exposes:
  - type: mcp
    namespace: fx-expense
    port: 8080
    tools:
    - name: reconcile-fx-expenses
      description: Pull Workday foreign currency expenses, convert at live rates, and update the Smartsheet finance tracker.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: The Workday expense report ID.
      - name: base_currency
        in: body
        type: string
        description: The base currency for conversion (e.g. USD).
      - name: sheet_id
        in: body
        type: string
        description: The Smartsheet sheet ID for the finance tracker.
      steps:
      - name: get-expense
        type: call
        call: workday.get-expense-report
        with:
          report_id: '{{expense_report_id}}'
      - name: get-exchange-rate
        type: call
        call: exchangerate.get-rate
        with:
          base: '{{base_currency}}'
          target: '{{get-expense.currency}}'
      - name: update-tracker
        type: call
        call: smartsheet.add-row
        with:
          sheet_id: '{{sheet_id}}'
          cells:
            report_id: '{{expense_report_id}}'
            original_amount: '{{get-expense.total_amount}}'
            original_currency: '{{get-expense.currency}}'
            exchange_rate: '{{get-exchange-rate.rate}}'
            converted_amount: '{{get-expense.total_amount}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_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: exchangerate
    baseUri: https://api.exchangerate-api.com/v4
    authentication:
      type: none
    resources:
    - name: rates
      path: /latest/{{base}}
      inputParameters:
      - name: base
        in: path
      - name: target
        in: query
      operations:
      - name: get-rate
        method: GET
  - type: http
    namespace: smartsheet
    baseUri: https://api.smartsheet.com/2.0
    authentication:
      type: bearer
      token: $secrets.smartsheet_token
    resources:
    - name: rows
      path: /sheets/{{sheet_id}}/rows
      inputParameters:
      - name: sheet_id
        in: path
      operations:
      - name: add-row
        method: POST
Open in Framework → View in Fleet → multi-currency-expense-reconciliation.yml

Syncs worker identity data from Workday to Okta for SSO provisioning, ensuring new hires and job changes are reflected in the identity provider within minutes.

naftiko: '0.5'
info:
  label: Workday to Okta Identity Sync
  description: Syncs worker identity data from Workday to Okta for SSO provisioning, ensuring new hires and job changes are reflected in the identity provider within minutes.
  tags:
  - platform
  - identity
  - workday
  - okta
  - integrations
capability:
  exposes:
  - type: mcp
    namespace: identity-sync
    port: 8080
    tools:
    - name: sync-worker-to-okta
      description: Given a Workday employee ID, sync their profile and group memberships to Okta.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: upsert-okta-user
        type: call
        call: okta.upsert-user
        with:
          email: '{{get-employee.work_email}}'
          firstName: '{{get-employee.first_name}}'
          lastName: '{{get-employee.last_name}}'
          department: '{{get-employee.department}}'
          title: '{{get-employee.job_title}}'
      - name: assign-okta-group
        type: call
        call: okta.assign-group
        with:
          user_id: '{{upsert-okta-user.user_id}}'
          group_name: '{{get-employee.department}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.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: okta
    baseUri: https://workday.okta.com/api/v1
    authentication:
      type: bearer
      token: $secrets.okta_token
    resources:
    - name: users
      path: /users
      operations:
      - name: upsert-user
        method: POST
    - name: group-assignments
      path: /groups/{{group_name}}/users/{{user_id}}
      inputParameters:
      - name: group_name
        in: path
      - name: user_id
        in: path
      operations:
      - name: assign-group
        method: PUT
Open in Framework → View in Fleet → workday-to-okta-identity-sync.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.workday.com/sales/v1
    authentication:
      type: bearer
      token: $secrets.workday_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

Queries Workday Learning for overdue compliance training assignments, sends reminder emails via SendGrid, and creates a Jira ticket for the compliance team when deadlines pass.

naftiko: '0.5'
info:
  label: Learning Assignment Compliance Tracker
  description: Queries Workday Learning for overdue compliance training assignments, sends reminder emails via SendGrid, and creates a Jira ticket for the compliance team when deadlines pass.
  tags:
  - hr
  - learning
  - workday
  - sendgrid
  - jira
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: learning-compliance
    port: 8080
    tools:
    - name: track-overdue-training
      description: Find overdue Workday Learning assignments, send email reminders, and escalate to the compliance team via Jira.
      inputParameters:
      - name: course_id
        in: body
        type: string
        description: The Workday Learning course ID for the compliance training.
      - name: reminder_template_id
        in: body
        type: string
        description: The SendGrid template ID for the reminder email.
      steps:
      - name: get-overdue-assignments
        type: call
        call: workday.get-learning-assignments
        with:
          course_id: '{{course_id}}'
          status: overdue
      - name: send-reminders
        type: call
        call: sendgrid.send-template-email
        with:
          template_id: '{{reminder_template_id}}'
          recipients: '{{get-overdue-assignments.worker_emails}}'
          subject: 'Overdue: Required Compliance Training'
      - name: escalate-to-compliance
        type: call
        call: jira.create-issue
        with:
          project_key: COMPLY
          summary: 'Overdue compliance training: {{get-overdue-assignments.count}} workers for course {{course_id}}'
          description: '{{get-overdue-assignments.count}} workers have not completed required compliance training. Course: {{course_id}}. Reminder emails sent.'
          issue_type: Task
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: learning-assignments
      path: /learning/assignments
      inputParameters:
      - name: course_id
        in: query
      - name: status
        in: query
      operations:
      - name: get-learning-assignments
        method: GET
  - type: http
    namespace: sendgrid
    baseUri: https://api.sendgrid.com/v3
    authentication:
      type: bearer
      token: $secrets.sendgrid_api_key
    resources:
    - name: mail
      path: /mail/send
      operations:
      - name: send-template-email
        method: POST
  - type: http
    namespace: jira
    baseUri: https://workday.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 → learning-assignment-compliance-tracker.yml

Extracts payroll tax data from Workday Payroll for a tax period, formats it for filing, submits to the tax filing service, and notifies the payroll team in Microsoft Teams.

naftiko: '0.5'
info:
  label: Payroll Tax Filing Automation
  description: Extracts payroll tax data from Workday Payroll for a tax period, formats it for filing, submits to the tax filing service, and notifies the payroll team in Microsoft Teams.
  tags:
  - payroll
  - tax
  - workday-payroll
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: payroll-tax
    port: 8080
    tools:
    - name: file-payroll-taxes
      description: Extract Workday payroll tax data, submit to filing service, and notify the payroll team.
      inputParameters:
      - name: tax_period
        in: body
        type: string
        description: The tax filing period (e.g. 2026-Q1).
      - name: jurisdiction
        in: body
        type: string
        description: Tax jurisdiction code (e.g. US-FED, US-CA).
      steps:
      - name: get-tax-data
        type: call
        call: workday.get-payroll-tax-data
        with:
          period: '{{tax_period}}'
          jurisdiction: '{{jurisdiction}}'
      - name: submit-filing
        type: call
        call: tax-service.submit-filing
        with:
          period: '{{tax_period}}'
          jurisdiction: '{{jurisdiction}}'
          total_tax: '{{get-tax-data.total_tax_liability}}'
          employee_count: '{{get-tax-data.employee_count}}'
      - name: notify-payroll
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: $secrets.payroll_teams_webhook
          text: 'Payroll tax filing submitted for {{jurisdiction}} — {{tax_period}}. Total liability: ${{get-tax-data.total_tax_liability}}. Filing ID: {{submit-filing.filing_id}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: payroll-tax
      path: /payroll/tax
      inputParameters:
      - name: period
        in: query
      - name: jurisdiction
        in: query
      operations:
      - name: get-payroll-tax-data
        method: GET
  - type: http
    namespace: tax-service
    baseUri: https://api.taxfilingservice.com/v2
    authentication:
      type: bearer
      token: $secrets.tax_service_token
    resources:
    - name: filings
      path: /filings
      operations:
      - name: submit-filing
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://outlook.office.com/webhook
    authentication:
      type: none
    resources:
    - name: incoming-webhook
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → payroll-tax-filing-automation.yml

Launches a performance review cycle by querying Workday for eligible workers, creating review tasks in Workday, and notifying managers in Microsoft Teams with review timelines.

naftiko: '0.5'
info:
  label: Performance Review Kickoff
  description: Launches a performance review cycle by querying Workday for eligible workers, creating review tasks in Workday, and notifying managers in Microsoft Teams with review timelines.
  tags:
  - hr
  - performance-management
  - workday
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: performance-reviews
    port: 8080
    tools:
    - name: kick-off-review-cycle
      description: 'Launch a performance review cycle: query eligible workers, create review tasks, and notify managers in Teams.'
      inputParameters:
      - name: review_cycle_id
        in: body
        type: string
        description: The Workday performance review cycle ID.
      - name: due_date
        in: body
        type: string
        description: Review submission due date in YYYY-MM-DD format.
      steps:
      - name: get-eligible-workers
        type: call
        call: workday.get-review-eligible
        with:
          cycle_id: '{{review_cycle_id}}'
      - name: create-review-tasks
        type: call
        call: workday.create-review-tasks
        with:
          cycle_id: '{{review_cycle_id}}'
          due_date: '{{due_date}}'
      - name: notify-managers
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: $secrets.hr_teams_webhook
          text: Performance review cycle {{review_cycle_id}} launched. {{get-eligible-workers.count}} workers eligible. Reviews due by {{due_date}}.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: review-eligible
      path: /performance/reviews/{{cycle_id}}/eligible
      inputParameters:
      - name: cycle_id
        in: path
      operations:
      - name: get-review-eligible
        method: GET
    - name: review-tasks
      path: /performance/reviews/{{cycle_id}}/tasks
      inputParameters:
      - name: cycle_id
        in: path
      operations:
      - name: create-review-tasks
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://outlook.office.com/webhook
    authentication:
      type: none
    resources:
    - name: incoming-webhook
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → performance-review-kickoff.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Extracts terminated worker records from Workday past retention period, archives them to Amazon S3 cold storage, and logs the archival event in Datadog for audit.

naftiko: '0.5'
info:
  label: Hire-to-Retire Data Archival
  description: Extracts terminated worker records from Workday past retention period, archives them to Amazon S3 cold storage, and logs the archival event in Datadog for audit.
  tags:
  - hr
  - compliance
  - workday
  - amazon-s3
  - datadog
capability:
  exposes:
  - type: mcp
    namespace: data-archival
    port: 8080
    tools:
    - name: archive-terminated-workers
      description: Extract terminated Workday workers past retention, archive to S3, and log in Datadog.
      inputParameters:
      - name: retention_cutoff_date
        in: body
        type: string
        description: Archive workers terminated before this date (YYYY-MM-DD).
      - name: s3_bucket
        in: body
        type: string
        description: The S3 bucket for archived data.
      steps:
      - name: get-terminated-workers
        type: call
        call: workday.run-report
        with:
          report: Terminated_Workers_Archive
          format: json
      - name: upload-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: '{{s3_bucket}}'
          key: hr-archive/terminated/{{retention_cutoff_date}}.json
          body: '{{get-terminated-workers.data}}'
      - name: log-to-datadog
        type: call
        call: datadog.create-event
        with:
          title: 'Worker data archived: {{retention_cutoff_date}}'
          text: Archived {{get-terminated-workers.row_count}} terminated worker records to s3://{{s3_bucket}}/hr-archive/terminated/{{retention_cutoff_date}}.json
          tags: service:workday,env:production,team:hr-platform
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /reports/{{report}}
      inputParameters:
      - name: report
        in: path
      - name: format
        in: query
      operations:
      - name: run-report
        method: GET
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v1
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: events
      path: /events
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → hire-to-retire-data-archival.yml

Runs a Workday headcount report, enriches it with engagement survey scores from Qualtrics, and loads the combined dataset into Amazon Redshift for people analytics.

naftiko: '0.5'
info:
  label: Workforce Analytics Export
  description: Runs a Workday headcount report, enriches it with engagement survey scores from Qualtrics, and loads the combined dataset into Amazon Redshift for people analytics.
  tags:
  - hr
  - analytics
  - workday-reporting
  - qualtrics
  - amazon-redshift
capability:
  exposes:
  - type: mcp
    namespace: workforce-analytics
    port: 8080
    tools:
    - name: export-workforce-analytics
      description: Run Workday headcount report, join with Qualtrics survey data, and load into Redshift.
      inputParameters:
      - name: report_name
        in: body
        type: string
        description: The Workday headcount report name.
      - name: survey_id
        in: body
        type: string
        description: The Qualtrics survey ID for engagement data.
      steps:
      - name: run-headcount-report
        type: call
        call: workday.run-report
        with:
          report: '{{report_name}}'
          format: json
      - name: get-survey-results
        type: call
        call: qualtrics.get-survey-responses
        with:
          survey_id: '{{survey_id}}'
      - name: load-to-redshift
        type: call
        call: redshift.execute-query
        with:
          query: INSERT INTO people_analytics.workforce_combined (headcount_data, survey_data, load_date) VALUES ('{{run-headcount-report.data}}', '{{get-survey-results.responses}}', CURRENT_DATE)
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /reports/{{report}}
      inputParameters:
      - name: report
        in: path
      - name: format
        in: query
      operations:
      - name: run-report
        method: GET
  - type: http
    namespace: qualtrics
    baseUri: https://yul1.qualtrics.com/API/v3
    authentication:
      type: bearer
      token: $secrets.qualtrics_token
    resources:
    - name: surveys
      path: /surveys/{{survey_id}}/responses
      inputParameters:
      - name: survey_id
        in: path
      operations:
      - name: get-survey-responses
        method: GET
  - type: http
    namespace: redshift
    baseUri: https://redshift-data.us-east-1.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_redshift_token
    resources:
    - name: statements
      path: /execute-statement
      operations:
      - name: execute-query
        method: POST
Open in Framework → View in Fleet → workforce-analytics-export.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Compares Workday Adaptive Planning budget forecast against actual spend from Workday Financials, and alerts finance leadership in Slack when variance exceeds a threshold.

naftiko: '0.5'
info:
  label: Budget Variance Alert
  description: Compares Workday Adaptive Planning budget forecast against actual spend from Workday Financials, and alerts finance leadership in Slack when variance exceeds a threshold.
  tags:
  - finance
  - budgeting
  - workday-financials
  - workday
  - slack
capability:
  exposes:
  - type: mcp
    namespace: budget-variance
    port: 8080
    tools:
    - name: check-budget-variance
      description: Compare planned vs actual spend for a cost center. Alert finance leadership in Slack if variance exceeds threshold.
      inputParameters:
      - name: cost_center_code
        in: body
        type: string
        description: The Workday cost center code.
      - name: fiscal_year
        in: body
        type: string
        description: Fiscal year in YYYY format.
      - name: variance_pct_threshold
        in: body
        type: number
        description: Maximum acceptable variance percentage.
      - name: finance_channel
        in: body
        type: string
        description: The Slack channel for finance alerts.
      steps:
      - name: get-budget
        type: call
        call: workday.get-budget
        with:
          cost_center: '{{cost_center_code}}'
          year: '{{fiscal_year}}'
      - name: get-actuals
        type: call
        call: workday.get-actuals
        with:
          cost_center: '{{cost_center_code}}'
          year: '{{fiscal_year}}'
      - name: alert-finance
        type: call
        call: slack.post-message
        with:
          channel: '{{finance_channel}}'
          text: 'Budget variance alert for {{cost_center_code}} (FY{{fiscal_year}}): Budget {{get-budget.allocated}}, Actual {{get-actuals.total_spend}}. Remaining: {{get-budget.remaining}}. Threshold: {{variance_pct_threshold}}%.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: budgets
      path: /financial_management/cost_centers/{{cost_center}}/budgets
      inputParameters:
      - name: cost_center
        in: path
      - name: year
        in: query
      operations:
      - name: get-budget
        method: GET
    - name: actuals
      path: /financial_management/cost_centers/{{cost_center}}/actuals
      inputParameters:
      - name: cost_center
        in: path
      - name: year
        in: query
      operations:
      - name: get-actuals
        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 → budget-variance-alert.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 worker submits a time-off request in Workday, creates a corresponding out-of-office event in Google Calendar and notifies the team in Slack.

naftiko: '0.5'
info:
  label: Absence Request with Calendar Sync
  description: When a worker submits a time-off request in Workday, creates a corresponding out-of-office event in Google Calendar and notifies the team in Slack.
  tags:
  - hr
  - time-off
  - workday
  - google-calendar
  - slack
capability:
  exposes:
  - type: mcp
    namespace: absence-sync
    port: 8080
    tools:
    - name: sync-absence-to-calendar
      description: Given a Workday absence request, create an OOO event in Google Calendar and notify the team.
      inputParameters:
      - name: absence_request_id
        in: body
        type: string
        description: The Workday absence request ID.
      - name: team_channel
        in: body
        type: string
        description: The Slack channel for team notifications.
      steps:
      - name: get-absence
        type: call
        call: workday.get-absence-request
        with:
          request_id: '{{absence_request_id}}'
      - name: create-ooo-event
        type: call
        call: gcal.create-event
        with:
          calendar_id: '{{get-absence.work_email}}'
          summary: OOO — {{get-absence.worker_name}}
          start_date: '{{get-absence.start_date}}'
          end_date: '{{get-absence.end_date}}'
          description: '{{get-absence.absence_type}}'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{team_channel}}'
          text: '{{get-absence.worker_name}} will be OOO {{get-absence.start_date}} to {{get-absence.end_date}} ({{get-absence.absence_type}}).'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: absences
      path: /absence/requests/{{request_id}}
      inputParameters:
      - name: request_id
        in: path
      operations:
      - name: get-absence-request
        method: GET
  - type: http
    namespace: gcal
    baseUri: https://www.googleapis.com/calendar/v3
    authentication:
      type: bearer
      token: $secrets.google_service_token
    resources:
    - name: events
      path: /calendars/{{calendar_id}}/events
      inputParameters:
      - name: calendar_id
        in: path
      operations:
      - name: create-event
        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 → absence-request-with-calendar-sync.yml

Retrieves hr tech operational data for workflow 9.

naftiko: '0.5'
info:
  label: Hr Tech Data Query 9
  description: Retrieves hr tech operational data for workflow 9.
  tags:
  - hr
  - operations
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-data-9
      description: Query hr tech data for workflow 9.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr-tech/v1
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-data-query-9.yml

Orchestrates hr tech workflow 8 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 8
  description: Orchestrates hr tech workflow 8 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-008
      description: Orchestrates hr tech 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 Hr Tech Workflow 8 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-8.yml

Pulls completed revenue schedules from Workday Financials, posts them to the general ledger, and syncs the revenue data to Salesforce for sales operations reporting.

naftiko: '0.5'
info:
  label: Revenue Recognition Sync
  description: Pulls completed revenue schedules from Workday Financials, posts them to the general ledger, and syncs the revenue data to Salesforce for sales operations reporting.
  tags:
  - finance
  - accounting
  - workday-financials
  - salesforce
  - revenue
capability:
  exposes:
  - type: mcp
    namespace: revenue-sync
    port: 8080
    tools:
    - name: sync-revenue-recognition
      description: Pull Workday revenue schedules, post to GL, and sync to Salesforce for reporting.
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period for revenue recognition.
      - name: revenue_type
        in: body
        type: string
        description: Revenue type filter (e.g. subscription, services).
      steps:
      - name: get-revenue-schedules
        type: call
        call: workday.get-revenue-schedules
        with:
          period: '{{fiscal_period}}'
          type: '{{revenue_type}}'
      - name: post-to-gl
        type: call
        call: workday.post-journal-entry
        with:
          ledger: Revenue
          period: '{{fiscal_period}}'
          amount: '{{get-revenue-schedules.total_recognized}}'
          memo: Revenue recognition — {{revenue_type}} — {{fiscal_period}}
      - name: sync-to-salesforce
        type: call
        call: salesforce.upsert-revenue
        with:
          period: '{{fiscal_period}}'
          type: '{{revenue_type}}'
          amount: '{{get-revenue-schedules.total_recognized}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: revenue-schedules
      path: /financial_management/revenue_schedules
      inputParameters:
      - name: period
        in: query
      - name: type
        in: query
      operations:
      - name: get-revenue-schedules
        method: GET
    - name: journal-entries
      path: /financial_management/journal_entries
      operations:
      - name: post-journal-entry
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://workday.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: revenue
      path: /sobjects/Revenue_Recognition__c
      operations:
      - name: upsert-revenue
        method: POST
Open in Framework → View in Fleet → revenue-recognition-sync.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Orchestrates hr tech workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 5
  description: Orchestrates hr tech workflow 5 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-005
      description: Orchestrates hr tech 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 Hr Tech Workflow 5 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-5.yml

Orchestrates hr tech workflow 11 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 11
  description: Orchestrates hr tech workflow 11 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-011
      description: Orchestrates hr tech 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 Hr Tech Workflow 11 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-11.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Orchestrates hr tech workflow 10 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 10
  description: Orchestrates hr tech workflow 10 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-010
      description: Orchestrates hr tech 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 Hr Tech Workflow 10 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-10.yml

Orchestrates hr tech workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 4
  description: Orchestrates hr tech workflow 4 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-004
      description: Orchestrates hr tech 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 Hr Tech Workflow 4 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-4.yml

Runs Workday diversity and inclusion reports, loads aggregated metrics into Snowflake, and triggers a Tableau dashboard refresh for the DEI leadership team.

naftiko: '0.5'
info:
  label: Diversity Metrics Dashboard Refresh
  description: Runs Workday diversity and inclusion reports, loads aggregated metrics into Snowflake, and triggers a Tableau dashboard refresh for the DEI leadership team.
  tags:
  - hr
  - analytics
  - workday-reporting
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: dei-metrics
    port: 8080
    tools:
    - name: refresh-dei-dashboard
      description: Run Workday DEI reports, load to Snowflake, and refresh the Tableau DEI dashboard.
      inputParameters:
      - name: report_name
        in: body
        type: string
        description: The Workday diversity report name.
      - name: datasource_id
        in: body
        type: string
        description: The Tableau datasource ID to refresh.
      steps:
      - name: run-dei-report
        type: call
        call: workday.run-report
        with:
          report: '{{report_name}}'
          format: json
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO HR_ANALYTICS.DEI_METRICS (report_date, data) SELECT CURRENT_DATE(), PARSE_JSON('{{run-dei-report.data}}')
      - name: refresh-tableau
        type: call
        call: tableau.refresh-datasource
        with:
          datasource_id: '{{datasource_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /reports/{{report}}
      inputParameters:
      - name: report
        in: path
      - name: format
        in: query
      operations:
      - name: run-report
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://workday.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: tableau
    baseUri: https://tableau.workday.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/default/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
Open in Framework → View in Fleet → diversity-metrics-dashboard-refresh.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

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.workday.com/communications/v1
    authentication:
      type: bearer
      token: $secrets.workday_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

Retrieves talent pipeline metrics for recruiting.

naftiko: '0.5'
info:
  label: Talent Pipeline Report
  description: Retrieves talent pipeline metrics for recruiting.
  tags:
  - hr
  - recruiting
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-talent
      description: Retrieves talent pipeline metrics for recruiting.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The talent pipeline report identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: talent
      path: /talent/pipeline/report/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-talent
        method: GET
Open in Framework → View in Fleet → talent-pipeline-report.yml

Retrieves available courses from the learning catalog.

naftiko: '0.5'
info:
  label: Learning Course Catalog
  description: Retrieves available courses from the learning catalog.
  tags:
  - hr
  - learning
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-learning
      description: Retrieves available courses from the learning catalog.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The learning course catalog identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: learning
      path: /learning/course/catalog/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-learning
        method: GET
Open in Framework → View in Fleet → learning-course-catalog.yml

Retrieves hr tech operational data for workflow 12.

naftiko: '0.5'
info:
  label: Hr Tech Data Query 12
  description: Retrieves hr tech operational data for workflow 12.
  tags:
  - hr
  - operations
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-data-12
      description: Query hr tech data for workflow 12.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr-tech/v1
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-data-query-12.yml

Retrieves hr tech operational data for workflow 6.

naftiko: '0.5'
info:
  label: Hr Tech Data Query 6
  description: Retrieves hr tech operational data for workflow 6.
  tags:
  - hr
  - operations
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-data-6
      description: Query hr tech data for workflow 6.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr-tech/v1
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-data-query-6.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Orchestrates hr tech workflow 7 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 7
  description: Orchestrates hr tech workflow 7 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-007
      description: Orchestrates hr tech 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 Hr Tech Workflow 7 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-7.yml

Orchestrates hr tech workflow 13 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 13
  description: Orchestrates hr tech workflow 13 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-013
      description: Orchestrates hr tech 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 Hr Tech Workflow 13 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-13.yml

Monitors Workday integration runs, and when a run fails, creates a PagerDuty incident and posts details to the platform engineering Slack channel.

naftiko: '0.5'
info:
  label: Integration Failure Alert Pipeline
  description: Monitors Workday integration runs, and when a run fails, creates a PagerDuty incident and posts details to the platform engineering Slack channel.
  tags:
  - integrations
  - platform-engineering
  - workday-integrations
  - pagerduty
  - slack
capability:
  exposes:
  - type: mcp
    namespace: integration-alerting
    port: 8080
    tools:
    - name: alert-integration-failure
      description: Given a failed Workday integration run ID, create a PagerDuty incident and alert the platform team in Slack.
      inputParameters:
      - name: integration_run_id
        in: body
        type: string
        description: The failed Workday integration run ID.
      - name: platform_channel
        in: body
        type: string
        description: The Slack channel ID for platform engineering.
      steps:
      - name: get-run-details
        type: call
        call: workday.get-integration-run
        with:
          run_id: '{{integration_run_id}}'
      - name: create-incident
        type: call
        call: pagerduty.create-incident
        with:
          title: 'Workday Integration Failed: {{get-run-details.integration_name}}'
          service_id: $secrets.pagerduty_workday_service_id
          urgency: high
          body: 'Run {{integration_run_id}} failed. Records processed: {{get-run-details.records_processed}}, failed: {{get-run-details.records_failed}}. Completed: {{get-run-details.completed_at}}.'
      - name: notify-platform
        type: call
        call: slack.post-message
        with:
          channel: '{{platform_channel}}'
          text: 'Integration failure: {{get-run-details.integration_name}} (run {{integration_run_id}}). {{get-run-details.records_failed}} records failed. PagerDuty incident: {{create-incident.incident_url}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: integration-runs
      path: /integrations/runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-integration-run
        method: GET
  - 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 → integration-failure-alert-pipeline.yml

On an inter-company worker transfer in Workday, updates the cost center assignment, transfers the ServiceNow CMDB asset records, and notifies both the old and new managers in Microsoft Teams.

naftiko: '0.5'
info:
  label: Worker Transfer Orchestrator
  description: On an inter-company worker transfer in Workday, updates the cost center assignment, transfers the ServiceNow CMDB asset records, and notifies both the old and new managers in Microsoft Teams.
  tags:
  - hr
  - workday
  - servicenow
  - microsoft-teams
  - transfer
capability:
  exposes:
  - type: mcp
    namespace: hr-transfer
    port: 8080
    tools:
    - name: orchestrate-transfer
      description: Given a Workday transfer event, update cost center, transfer CMDB assets, and notify both managers.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID being transferred.
      - name: new_cost_center
        in: body
        type: string
        description: The new cost center code.
      - name: effective_date
        in: body
        type: string
        description: Transfer effective date in YYYY-MM-DD format.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: get-new-manager
        type: call
        call: workday.get-cost-center-manager
        with:
          cost_center: '{{new_cost_center}}'
      - name: transfer-assets
        type: call
        call: servicenow.update-cmdb-owner
        with:
          current_owner: '{{get-employee.work_email}}'
          new_cost_center: '{{new_cost_center}}'
      - name: notify-old-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-employee.manager_email}}'
          text: '{{get-employee.full_name}} is transferring to {{new_cost_center}} effective {{effective_date}}. {{transfer-assets.asset_count}} assets reassigned.'
      - name: notify-new-manager
        type: call
        call: msteams.send-message
        with:
          recipient_upn: '{{get-new-manager.manager_email}}'
          text: '{{get-employee.full_name}} is joining your team effective {{effective_date}} from {{get-employee.cost_center}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.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
    - name: cost-center-managers
      path: /organizations/costCenters/{{cost_center}}/manager
      inputParameters:
      - name: cost_center
        in: path
      operations:
      - name: get-cost-center-manager
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://workday.service-now.com/api/now
    authentication:
      type: basic
      username: $secrets.servicenow_user
      password: $secrets.servicenow_password
    resources:
    - name: cmdb
      path: /table/cmdb_ci
      operations:
      - name: update-cmdb-owner
        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 → worker-transfer-orchestrator.yml

When a Workday job requisition is approved, extracts the job details, creates a LinkedIn job posting via the LinkedIn API, and updates the requisition with the external posting URL.

naftiko: '0.5'
info:
  label: Job Requisition to LinkedIn Posting
  description: When a Workday job requisition is approved, extracts the job details, creates a LinkedIn job posting via the LinkedIn API, and updates the requisition with the external posting URL.
  tags:
  - recruiting
  - hr
  - workday-recruiting
  - linkedin
capability:
  exposes:
  - type: mcp
    namespace: recruiting-syndication
    port: 8080
    tools:
    - name: syndicate-to-linkedin
      description: Given a Workday requisition ID, pull job details and create a LinkedIn job posting. Returns the LinkedIn posting URL.
      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:
          req_id: '{{requisition_id}}'
      - name: post-to-linkedin
        type: call
        call: linkedin.create-job-posting
        with:
          title: '{{get-requisition.title}}'
          description: '{{get-requisition.job_description}}'
          location: '{{get-requisition.location}}'
          company_id: '{{get-requisition.company_linkedin_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.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-postings
      path: /simpleJobPostings
      operations:
      - name: create-job-posting
        method: POST
Open in Framework → View in Fleet → job-requisition-to-linkedin-posting.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Retrieves hr tech operational data for workflow 3.

naftiko: '0.5'
info:
  label: Hr Tech Data Query 3
  description: Retrieves hr tech operational data for workflow 3.
  tags:
  - hr
  - operations
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-data-3
      description: Query hr tech data for workflow 3.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr-tech/v1
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-data-query-3.yml

Retrieves a supplier invoice from Workday Financials by invoice number, returning vendor, amount, due date, and approval status.

naftiko: '0.5'
info:
  label: Supplier Invoice Lookup
  description: Retrieves a supplier invoice from Workday Financials by invoice number, returning vendor, amount, due date, and approval status.
  tags:
  - finance
  - accounts-payable
  - workday-financials
capability:
  exposes:
  - type: mcp
    namespace: finance-ap
    port: 8080
    tools:
    - name: get-supplier-invoice
      description: Look up a Workday supplier invoice by number. Returns vendor name, invoice amount, due date, and approval status.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The Workday supplier invoice number.
      call: workday.get-invoice
      with:
        invoice_number: '{{invoice_number}}'
      outputParameters:
      - name: vendor
        type: string
        mapping: $.supplierName
      - name: amount
        type: number
        mapping: $.invoiceAmount
      - name: due_date
        type: string
        mapping: $.dueDate
      - name: approval_status
        type: string
        mapping: $.approvalStatus
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: invoices
      path: /financial_management/supplier_invoices/{{invoice_number}}
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        method: GET
Open in Framework → View in Fleet → supplier-invoice-lookup.yml

When a Workday supplier invoice exceeds the auto-approval threshold, routes for manager approval via Workday, posts to the AP Slack channel, and logs the approval in Confluence.

naftiko: '0.5'
info:
  label: Accounts Payable Invoice Approval
  description: When a Workday supplier invoice exceeds the auto-approval threshold, routes for manager approval via Workday, posts to the AP Slack channel, and logs the approval in Confluence.
  tags:
  - finance
  - accounts-payable
  - workday-financials
  - slack
  - confluence
capability:
  exposes:
  - type: mcp
    namespace: ap-approval
    port: 8080
    tools:
    - name: route-invoice-approval
      description: Given a Workday invoice and threshold, route for manager approval, notify AP in Slack, and log in Confluence.
      inputParameters:
      - name: invoice_number
        in: body
        type: string
        description: The Workday supplier invoice number.
      - name: ap_channel
        in: body
        type: string
        description: The Slack channel for AP notifications.
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID for the AP approval log.
      steps:
      - name: get-invoice
        type: call
        call: workday.get-invoice
        with:
          invoice_number: '{{invoice_number}}'
      - name: notify-ap
        type: call
        call: slack.post-message
        with:
          channel: '{{ap_channel}}'
          text: 'Invoice {{invoice_number}} from {{get-invoice.vendor}} for {{get-invoice.amount}} requires approval. Due: {{get-invoice.due_date}}.'
      - name: log-to-confluence
        type: call
        call: confluence.append-to-page
        with:
          page_id: '{{confluence_page_id}}'
          content: '| {{invoice_number}} | {{get-invoice.vendor}} | {{get-invoice.amount}} | {{get-invoice.due_date}} | Pending |'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: invoices
      path: /financial_management/supplier_invoices/{{invoice_number}}
      inputParameters:
      - name: invoice_number
        in: path
      operations:
      - name: get-invoice
        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
  - type: http
    namespace: confluence
    baseUri: https://workday.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: append-to-page
        method: PUT
Open in Framework → View in Fleet → accounts-payable-invoice-approval.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.workday.com/it/v1
    authentication:
      type: bearer
      token: $secrets.workday_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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Extracts Workday tenant security and configuration settings, compares against a compliance baseline in GitHub, and opens a Jira ticket for any deviations.

naftiko: '0.5'
info:
  label: Workday Tenant Configuration Audit
  description: Extracts Workday tenant security and configuration settings, compares against a compliance baseline in GitHub, and opens a Jira ticket for any deviations.
  tags:
  - platform-engineering
  - security
  - workday
  - github
  - jira
capability:
  exposes:
  - type: mcp
    namespace: tenant-audit
    port: 8080
    tools:
    - name: audit-tenant-config
      description: Pull Workday tenant config, compare against GitHub compliance baseline, and create Jira tickets for deviations.
      inputParameters:
      - name: tenant_id
        in: body
        type: string
        description: The Workday tenant identifier.
      - name: baseline_repo
        in: body
        type: string
        description: The GitHub repo (owner/repo) containing the compliance baseline.
      - name: baseline_path
        in: body
        type: string
        description: Path to the baseline config file in the repo.
      steps:
      - name: get-tenant-config
        type: call
        call: workday.get-tenant-config
        with:
          tenant_id: '{{tenant_id}}'
      - name: get-baseline
        type: call
        call: github.get-file
        with:
          repo: '{{baseline_repo}}'
          path: '{{baseline_path}}'
      - name: create-deviation-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: WDPLATFORM
          summary: 'Tenant config deviation detected: {{tenant_id}}'
          description: Current config differs from baseline at {{baseline_repo}}/{{baseline_path}}. Review tenant security settings.
          issue_type: Bug
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: tenant-config
      path: /tenants/{{tenant_id}}/configuration
      inputParameters:
      - name: tenant_id
        in: path
      operations:
      - name: get-tenant-config
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: contents
      path: /repos/{{repo}}/contents/{{path}}
      inputParameters:
      - name: repo
        in: path
      - name: path
        in: path
      operations:
      - name: get-file
        method: GET
  - type: http
    namespace: jira
    baseUri: https://workday.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-tenant-configuration-audit.yml

Orchestrates hr tech workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 2
  description: Orchestrates hr tech workflow 2 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-002
      description: Orchestrates hr tech 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 Hr Tech Workflow 2 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-2.yml

Executes a Workday custom report by report name and returns the results as structured data. Useful for ad-hoc analytics queries.

naftiko: '0.5'
info:
  label: Workday Report Execution
  description: Executes a Workday custom report by report name and returns the results as structured data. Useful for ad-hoc analytics queries.
  tags:
  - reporting
  - analytics
  - workday-reporting
capability:
  exposes:
  - type: mcp
    namespace: reporting
    port: 8080
    tools:
    - name: run-custom-report
      description: Execute a Workday custom report by name and optional filter parameters. Returns report data rows.
      inputParameters:
      - name: report_name
        in: body
        type: string
        description: The Workday custom report name (URL-safe).
      - name: format
        in: body
        type: string
        description: 'Output format: json or csv.'
      call: workday.run-report
      with:
        report: '{{report_name}}'
        format: '{{format}}'
      outputParameters:
      - name: row_count
        type: number
        mapping: $.Report_Entry.length()
      - name: data
        type: array
        mapping: $.Report_Entry[*]
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /reports/{{report}}
      inputParameters:
      - name: report
        in: path
      - name: format
        in: query
      operations:
      - name: run-report
        method: GET
Open in Framework → View in Fleet → workday-report-execution.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 expense reports from Workday, validates against corporate policy thresholds, and opens a Jira ticket for finance audit when violations are detected.

naftiko: '0.5'
info:
  label: Expense Report Compliance Check
  description: Retrieves expense reports from Workday, validates against corporate policy thresholds, and opens a Jira ticket for finance audit when violations are detected.
  tags:
  - finance
  - expense
  - workday
  - jira
  - compliance
capability:
  exposes:
  - type: mcp
    namespace: expense-compliance
    port: 8080
    tools:
    - name: check-expense-compliance
      description: Fetch a Workday expense report and validate against policy. If violations found, open a Jira audit ticket.
      inputParameters:
      - name: expense_report_id
        in: body
        type: string
        description: The Workday expense report ID.
      - name: employee_id
        in: body
        type: string
        description: The employee ID who submitted the report.
      steps:
      - name: get-expense
        type: call
        call: workday.get-expense-report
        with:
          report_id: '{{expense_report_id}}'
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{employee_id}}'
      - name: create-audit-ticket
        type: call
        call: jira.create-issue
        with:
          project_key: FINAUDIT
          summary: 'Expense policy review: {{get-expense.report_name}} — {{get-employee.full_name}}'
          description: 'Report total: {{get-expense.total_amount}} {{get-expense.currency}}. Submitted: {{get-expense.submit_date}}. Cost center: {{get-employee.cost_center}}.'
          issue_type: Task
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: expense-reports
      path: /expense/reports/{{report_id}}
      inputParameters:
      - name: report_id
        in: path
      operations:
      - name: get-expense-report
        method: GET
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: jira
    baseUri: https://workday.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 → expense-report-compliance-check.yml

Orchestrates hr tech workflow 14 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 14
  description: Orchestrates hr tech workflow 14 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-014
      description: Orchestrates hr tech 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 Hr Tech Workflow 14 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-14.yml

Retrieves a forecast version from Workday Adaptive Planning by plan name and version, returning revenue, expense, and headcount projections.

naftiko: '0.5'
info:
  label: Adaptive Planning Forecast Lookup
  description: Retrieves a forecast version from Workday Adaptive Planning by plan name and version, returning revenue, expense, and headcount projections.
  tags:
  - planning
  - finance
  - workday
capability:
  exposes:
  - type: mcp
    namespace: adaptive-planning
    port: 8080
    tools:
    - name: get-forecast
      description: Retrieve a Workday Adaptive Planning forecast by plan and version. Returns revenue, expense, and headcount projections.
      inputParameters:
      - name: plan_name
        in: body
        type: string
        description: The Adaptive Planning plan name.
      - name: version_name
        in: body
        type: string
        description: The forecast version name.
      call: workday.get-forecast
      with:
        plan: '{{plan_name}}'
        version: '{{version_name}}'
      outputParameters:
      - name: total_revenue
        type: number
        mapping: $.projections.revenue
      - name: total_expense
        type: number
        mapping: $.projections.expense
      - name: headcount
        type: number
        mapping: $.projections.headcount
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: forecasts
      path: /planning/forecasts
      inputParameters:
      - name: plan
        in: query
      - name: version
        in: query
      operations:
      - name: get-forecast
        method: GET
Open in Framework → View in Fleet → adaptive-planning-forecast-lookup.yml

Returns the supervisory organization hierarchy for a given organization ID in Workday, including parent org, manager, and direct child orgs.

naftiko: '0.5'
info:
  label: Organization Hierarchy Lookup
  description: Returns the supervisory organization hierarchy for a given organization ID in Workday, including parent org, manager, and direct child orgs.
  tags:
  - hr
  - organization
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hcm-org
    port: 8080
    tools:
    - name: get-org-hierarchy
      description: Retrieve the supervisory organization tree for a Workday org ID. Returns parent org, org manager, and child organizations.
      inputParameters:
      - name: org_id
        in: body
        type: string
        description: The Workday supervisory organization ID.
      call: workday.get-org
      with:
        org_id: '{{org_id}}'
      outputParameters:
      - name: org_name
        type: string
        mapping: $.name
      - name: manager
        type: string
        mapping: $.manager.fullName
      - name: parent_org
        type: string
        mapping: $.parentOrg.name
      - name: child_orgs
        type: array
        mapping: $.childOrgs[*].name
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: organizations
      path: /organizations/{{org_id}}
      inputParameters:
      - name: org_id
        in: path
      operations:
      - name: get-org
        method: GET
Open in Framework → View in Fleet → organization-hierarchy-lookup.yml

Returns the current compensation details for a Workday worker, including base pay, bonus target, pay grade, and currency.

naftiko: '0.5'
info:
  label: Compensation Detail Lookup
  description: Returns the current compensation details for a Workday worker, including base pay, bonus target, pay grade, and currency.
  tags:
  - hr
  - compensation
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hcm-compensation
    port: 8080
    tools:
    - name: get-compensation
      description: Retrieve current compensation for a worker by employee ID. Returns base pay, bonus target percentage, pay grade, and currency.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      call: workday.get-compensation
      with:
        worker_id: '{{employee_id}}'
      outputParameters:
      - name: base_salary
        type: number
        mapping: $.basePay.amount
      - name: bonus_target_pct
        type: number
        mapping: $.bonusTarget.percentage
      - name: pay_grade
        type: string
        mapping: $.payGrade
      - name: currency
        type: string
        mapping: $.basePay.currency
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: compensation
      path: /workers/{{worker_id}}/compensation
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-compensation
        method: GET
Open in Framework → View in Fleet → compensation-detail-lookup.yml

Generates an offer letter from Workday Recruiting candidate data, sends it for e-signature via DocuSign, and updates the candidate status in Workday upon completion.

naftiko: '0.5'
info:
  label: DocuSign Offer Letter Pipeline
  description: Generates an offer letter from Workday Recruiting candidate data, sends it for e-signature via DocuSign, and updates the candidate status in Workday upon completion.
  tags:
  - recruiting
  - hr
  - workday-recruiting
  - docusign
capability:
  exposes:
  - type: mcp
    namespace: offer-letter
    port: 8080
    tools:
    - name: send-offer-letter
      description: Pull candidate details from Workday, send an offer letter via DocuSign, and update candidate status.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Workday candidate application ID.
      - name: template_id
        in: body
        type: string
        description: The DocuSign template ID for the offer letter.
      steps:
      - name: get-candidate
        type: call
        call: workday.get-application
        with:
          app_id: '{{application_id}}'
      - name: send-envelope
        type: call
        call: docusign.create-envelope
        with:
          template_id: '{{template_id}}'
          signer_email: '{{get-candidate.candidate_email}}'
          signer_name: '{{get-candidate.candidate_name}}'
          tabs:
            position_title: '{{get-candidate.job_title}}'
            start_date: '{{get-candidate.proposed_start_date}}'
            salary: '{{get-candidate.proposed_salary}}'
      - name: update-candidate-status
        type: call
        call: workday.update-application-status
        with:
          app_id: '{{application_id}}'
          status: Offer Sent
          envelope_id: '{{send-envelope.envelope_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: applications
      path: /recruiting/applications/{{app_id}}
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-application
        method: GET
    - name: application-status
      path: /recruiting/applications/{{app_id}}/status
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: update-application-status
        method: PUT
  - type: http
    namespace: docusign
    baseUri: https://na4.docusign.net/restapi/v2.1/accounts/$secrets.docusign_account_id
    authentication:
      type: bearer
      token: $secrets.docusign_token
    resources:
    - name: envelopes
      path: /envelopes
      operations:
      - name: create-envelope
        method: POST
Open in Framework → View in Fleet → docusign-offer-letter-pipeline.yml

Retrieves hr tech operational data for workflow 15.

naftiko: '0.5'
info:
  label: Hr Tech Data Query 15
  description: Retrieves hr tech operational data for workflow 15.
  tags:
  - hr
  - operations
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-data-15
      description: Query hr tech data for workflow 15.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr-tech/v1
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-data-query-15.yml

Converts a contingent worker to full-time employee in Workday, provisions benefits enrollment, creates an Azure AD permanent account, and notifies HR and the hiring manager.

naftiko: '0.5'
info:
  label: Contractor Conversion to FTE
  description: Converts a contingent worker to full-time employee in Workday, provisions benefits enrollment, creates an Azure AD permanent account, and notifies HR and the hiring manager.
  tags:
  - hr
  - workday
  - microsoft-teams
  - onboarding
  - contingent-worker
capability:
  exposes:
  - type: mcp
    namespace: contractor-conversion
    port: 8080
    tools:
    - name: convert-to-fte
      description: Convert a Workday contingent worker to FTE, provision benefits, create permanent AD account, and notify stakeholders.
      inputParameters:
      - name: contingent_worker_id
        in: body
        type: string
        description: The Workday contingent worker ID.
      - name: fte_start_date
        in: body
        type: string
        description: The FTE start date in YYYY-MM-DD format.
      - name: hr_channel
        in: body
        type: string
        description: The Teams channel webhook for HR notifications.
      steps:
      - name: get-worker
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{contingent_worker_id}}'
      - name: convert-worker
        type: call
        call: workday.convert-to-employee
        with:
          worker_id: '{{contingent_worker_id}}'
          start_date: '{{fte_start_date}}'
      - name: provision-ad
        type: call
        call: msgraph.update-user
        with:
          user_id: '{{get-worker.work_email}}'
          employeeType: Full-Time
          accountEnabled: true
      - name: notify-hr
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: '{{hr_channel}}'
          text: 'Contractor {{get-worker.full_name}} converted to FTE effective {{fte_start_date}}. New employee ID: {{convert-worker.employee_id}}. Benefits enrollment initiated.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.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
    - name: conversions
      path: /workers/{{worker_id}}/convertToEmployee
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: convert-to-employee
        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/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user
        method: PATCH
  - type: http
    namespace: msteams
    baseUri: https://outlook.office.com/webhook
    authentication:
      type: none
    resources:
    - name: incoming-webhook
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → contractor-conversion-to-fte.yml

Orchestrates hr tech workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Hr Tech Workflow 1
  description: Orchestrates hr tech workflow 1 by coordinating across systems, validating data, and sending notifications.
  tags:
  - hr
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: run-hr-tech-workflow-001
      description: Orchestrates hr tech 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 Hr Tech Workflow 1 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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 → hr-tech-workflow-1.yml

Pulls Workday GL trial balance and bank statement data, compares balances, and creates a ServiceNow task for treasury when discrepancies are found.

naftiko: '0.5'
info:
  label: General Ledger Reconciliation Pipeline
  description: Pulls Workday GL trial balance and bank statement data, compares balances, and creates a ServiceNow task for treasury when discrepancies are found.
  tags:
  - finance
  - accounting
  - workday-financials
  - servicenow
  - reconciliation
capability:
  exposes:
  - type: mcp
    namespace: gl-reconciliation
    port: 8080
    tools:
    - name: reconcile-gl
      description: Compare Workday GL trial balance against bank data. Create a ServiceNow task if discrepancies exist.
      inputParameters:
      - name: ledger_account
        in: body
        type: string
        description: The GL ledger account code.
      - name: as_of_date
        in: body
        type: string
        description: The reconciliation date in YYYY-MM-DD format.
      steps:
      - name: get-trial-balance
        type: call
        call: workday.get-trial-balance
        with:
          account: '{{ledger_account}}'
          date: '{{as_of_date}}'
      - name: get-bank-balance
        type: call
        call: workday.get-bank-statement
        with:
          account: '{{ledger_account}}'
          date: '{{as_of_date}}'
      - name: open-discrepancy-task
        type: call
        call: servicenow.create-task
        with:
          short_description: 'GL reconciliation discrepancy: {{ledger_account}} as of {{as_of_date}}'
          description: 'GL balance: {{get-trial-balance.balance}}, Bank balance: {{get-bank-balance.balance}}. Variance: {{get-trial-balance.balance}} - {{get-bank-balance.balance}}.'
          assigned_group: Treasury_Operations
          category: gl_reconciliation
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: trial-balance
      path: /financial_management/trial_balance/{{account}}
      inputParameters:
      - name: account
        in: path
      - name: date
        in: query
      operations:
      - name: get-trial-balance
        method: GET
    - name: bank-statements
      path: /financial_management/bank_statements/{{account}}
      inputParameters:
      - name: account
        in: path
      - name: date
        in: query
      operations:
      - name: get-bank-statement
        method: GET
  - type: http
    namespace: servicenow
    baseUri: https://workday.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 → general-ledger-reconciliation-pipeline.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Retrieves employee profile from Workday.

naftiko: '0.5'
info:
  label: Workday Employee Profile
  description: Retrieves employee profile from Workday.
  tags:
  - hr
  - workday
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-workday
      description: Retrieves employee profile from Workday.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The workday employee profile identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: workday
      path: /workday/employee/profile/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-workday
        method: GET
Open in Framework → View in Fleet → workday-employee-profile.yml

Retrieves organizational chart for a department.

naftiko: '0.5'
info:
  label: Org Chart Viewer
  description: Retrieves organizational chart for a department.
  tags:
  - hr
  - organization
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-org
      description: Retrieves organizational chart for a department.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The org chart viewer identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: org
      path: /org/chart/viewer/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-org
        method: GET
Open in Framework → View in Fleet → org-chart-viewer.yml

Orchestrates the Workday financial period close by running the close report, posting pending journal entries, and notifying the controller team in Microsoft Teams when complete.

naftiko: '0.5'
info:
  label: Finance Period Close Orchestrator
  description: Orchestrates the Workday financial period close by running the close report, posting pending journal entries, and notifying the controller team in Microsoft Teams when complete.
  tags:
  - finance
  - accounting
  - workday-financials
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: finance-close
    port: 8080
    tools:
    - name: run-period-close
      description: 'Trigger a Workday fiscal period close sequence: run the close report, post pending journals, and notify controllers.'
      inputParameters:
      - name: fiscal_period
        in: body
        type: string
        description: The fiscal period identifier (e.g. FY2026-Q1).
      - name: controller_channel
        in: body
        type: string
        description: The Teams channel webhook URL for controller notifications.
      steps:
      - name: run-close-report
        type: call
        call: workday.run-report
        with:
          report: Period_Close_Summary
          format: json
      - name: post-journals
        type: call
        call: workday.post-pending-journals
        with:
          period: '{{fiscal_period}}'
      - name: notify-controllers
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: '{{controller_channel}}'
          text: Period {{fiscal_period}} close complete. {{run-close-report.row_count}} items reviewed. {{post-journals.posted_count}} journals posted.
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /reports/{{report}}
      inputParameters:
      - name: report
        in: path
      - name: format
        in: query
      operations:
      - name: run-report
        method: GET
    - name: journal-posting
      path: /financial_management/journal_entries/post
      inputParameters:
      - name: period
        in: query
      operations:
      - name: post-pending-journals
        method: POST
  - type: http
    namespace: msteams
    baseUri: https://outlook.office.com/webhook
    authentication:
      type: none
    resources:
    - name: incoming-webhook
      path: /{{webhook_url}}
      inputParameters:
      - name: webhook_url
        in: path
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → finance-period-close-orchestrator.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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Retrieves the status of a Workday Financials journal entry by ID, returning posting status, ledger, amount, and company.

naftiko: '0.5'
info:
  label: Journal Entry Status
  description: Retrieves the status of a Workday Financials journal entry by ID, returning posting status, ledger, amount, and company.
  tags:
  - finance
  - accounting
  - workday-financials
capability:
  exposes:
  - type: mcp
    namespace: finance-journal
    port: 8080
    tools:
    - name: get-journal-entry
      description: Look up a Workday journal entry by ID. Returns status, ledger account, total amount, and company.
      inputParameters:
      - name: journal_id
        in: body
        type: string
        description: The Workday journal entry ID.
      call: workday.get-journal
      with:
        journal_id: '{{journal_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.postingStatus
      - name: ledger
        type: string
        mapping: $.ledgerAccount
      - name: total_amount
        type: number
        mapping: $.totalAmount
      - name: company
        type: string
        mapping: $.company
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: journals
      path: /financial_management/journal_entries/{{journal_id}}
      inputParameters:
      - name: journal_id
        in: path
      operations:
      - name: get-journal
        method: GET
Open in Framework → View in Fleet → journal-entry-status.yml

Extracts worker skills profiles from Workday, compares against role competency frameworks, identifies gaps, and creates personalized learning paths in Workday Learning.

naftiko: '0.5'
info:
  label: Skills Gap Analysis Pipeline
  description: Extracts worker skills profiles from Workday, compares against role competency frameworks, identifies gaps, and creates personalized learning paths in Workday Learning.
  tags:
  - hr
  - talent-management
  - workday
  - learning
capability:
  exposes:
  - type: mcp
    namespace: skills-analysis
    port: 8080
    tools:
    - name: analyze-skills-gap
      description: Pull worker skills from Workday, compare against role framework, and create a learning plan for identified gaps.
      inputParameters:
      - name: employee_id
        in: body
        type: string
        description: The Workday employee ID.
      - name: role_profile_id
        in: body
        type: string
        description: The Workday role competency profile ID.
      steps:
      - name: get-worker-skills
        type: call
        call: workday.get-worker-skills
        with:
          worker_id: '{{employee_id}}'
      - name: get-role-framework
        type: call
        call: workday.get-competency-framework
        with:
          profile_id: '{{role_profile_id}}'
      - name: create-learning-plan
        type: call
        call: workday.create-learning-assignment
        with:
          worker_id: '{{employee_id}}'
          skills_gap: '{{get-role-framework.required_skills}}'
          current_skills: '{{get-worker-skills.skills}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: worker-skills
      path: /workers/{{worker_id}}/skills
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker-skills
        method: GET
    - name: competency-frameworks
      path: /talent/competencyFrameworks/{{profile_id}}
      inputParameters:
      - name: profile_id
        in: path
      operations:
      - name: get-competency-framework
        method: GET
    - name: learning-assignments
      path: /learning/assignments
      operations:
      - name: create-learning-assignment
        method: POST
Open in Framework → View in Fleet → skills-gap-analysis-pipeline.yml

Deploys a Workday Extend custom app by pushing the app package to the Workday Extend API, running validation, and posting deployment status to the engineering Slack channel.

naftiko: '0.5'
info:
  label: Workday Extend App Deployment
  description: Deploys a Workday Extend custom app by pushing the app package to the Workday Extend API, running validation, and posting deployment status to the engineering Slack channel.
  tags:
  - platform-engineering
  - workday-extend
  - slack
  - deployment
capability:
  exposes:
  - type: mcp
    namespace: extend-deploy
    port: 8080
    tools:
    - name: deploy-extend-app
      description: Deploy a Workday Extend app package, validate it, and notify the engineering team in Slack.
      inputParameters:
      - name: app_id
        in: body
        type: string
        description: The Workday Extend application ID.
      - name: version
        in: body
        type: string
        description: The version label to deploy.
      - name: eng_channel
        in: body
        type: string
        description: The Slack channel for engineering notifications.
      steps:
      - name: deploy-app
        type: call
        call: workday.deploy-extend-app
        with:
          app_id: '{{app_id}}'
          version: '{{version}}'
      - name: validate-deployment
        type: call
        call: workday.validate-extend-app
        with:
          app_id: '{{app_id}}'
          deployment_id: '{{deploy-app.deployment_id}}'
      - name: notify-eng
        type: call
        call: slack.post-message
        with:
          channel: '{{eng_channel}}'
          text: 'Workday Extend app {{app_id}} v{{version}} deployed. Status: {{validate-deployment.status}}. Deployment ID: {{deploy-app.deployment_id}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: extend-apps
      path: /apps/{{app_id}}/deploy
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: deploy-extend-app
        method: POST
    - name: extend-validation
      path: /apps/{{app_id}}/deployments/{{deployment_id}}/validate
      inputParameters:
      - name: app_id
        in: path
      - name: deployment_id
        in: path
      operations:
      - name: validate-extend-app
        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 → workday-extend-app-deployment.yml

Extracts talent review ratings and succession data from Workday, pushes structured records to Snowflake, and updates a Tableau dashboard for CHRO visibility.

naftiko: '0.5'
info:
  label: Talent Review Dashboard Sync
  description: Extracts talent review ratings and succession data from Workday, pushes structured records to Snowflake, and updates a Tableau dashboard for CHRO visibility.
  tags:
  - hr
  - talent-management
  - workday
  - snowflake
  - tableau
capability:
  exposes:
  - type: mcp
    namespace: talent-sync
    port: 8080
    tools:
    - name: sync-talent-reviews
      description: Pull talent review data from Workday, load into Snowflake, and refresh the Tableau talent dashboard.
      inputParameters:
      - name: review_cycle
        in: body
        type: string
        description: The talent review cycle identifier (e.g. FY2026-annual).
      - name: datasource_id
        in: body
        type: string
        description: The Tableau datasource ID to refresh.
      steps:
      - name: get-talent-data
        type: call
        call: workday.run-report
        with:
          report: Talent_Review_Summary
          format: json
      - name: load-to-snowflake
        type: call
        call: snowflake.execute-statement
        with:
          statement: INSERT INTO HR_ANALYTICS.TALENT_REVIEWS SELECT * FROM TABLE(RESULT_SCAN('{{get-talent-data.query_id}}'))
      - name: refresh-dashboard
        type: call
        call: tableau.refresh-datasource
        with:
          datasource_id: '{{datasource_id}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: reports
      path: /reports/{{report}}
      inputParameters:
      - name: report
        in: path
      - name: format
        in: query
      operations:
      - name: run-report
        method: GET
  - type: http
    namespace: snowflake
    baseUri: https://workday.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: tableau
    baseUri: https://tableau.workday.com/api/3.21
    authentication:
      type: bearer
      token: $secrets.tableau_token
    resources:
    - name: datasources
      path: /sites/default/datasources/{{datasource_id}}/refresh
      inputParameters:
      - name: datasource_id
        in: path
      operations:
      - name: refresh-datasource
        method: POST
Open in Framework → View in Fleet → talent-review-dashboard-sync.yml

Triggers a Workday Enterprise Interface Builder (EIB) data export, monitors completion, and uploads the output file to Amazon S3 for downstream consumption.

naftiko: '0.5'
info:
  label: Workday EIB Data Export
  description: Triggers a Workday Enterprise Interface Builder (EIB) data export, monitors completion, and uploads the output file to Amazon S3 for downstream consumption.
  tags:
  - integrations
  - platform-engineering
  - workday-integrations
  - amazon-s3
capability:
  exposes:
  - type: mcp
    namespace: eib-export
    port: 8080
    tools:
    - name: run-eib-export
      description: Trigger a Workday EIB export, wait for completion, and upload output to S3.
      inputParameters:
      - name: eib_id
        in: body
        type: string
        description: The Workday EIB integration system ID.
      - name: s3_bucket
        in: body
        type: string
        description: The target S3 bucket name.
      - name: s3_prefix
        in: body
        type: string
        description: The S3 key prefix for the output file.
      steps:
      - name: trigger-eib
        type: call
        call: workday.launch-integration
        with:
          integration_id: '{{eib_id}}'
      - name: check-status
        type: call
        call: workday.get-integration-run
        with:
          run_id: '{{trigger-eib.run_id}}'
      - name: upload-to-s3
        type: call
        call: s3.put-object
        with:
          bucket: '{{s3_bucket}}'
          key: '{{s3_prefix}}/{{eib_id}}_{{trigger-eib.run_id}}.csv'
          body: '{{check-status.output_data}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: integrations
      path: /integrations/{{integration_id}}/launch
      inputParameters:
      - name: integration_id
        in: path
      operations:
      - name: launch-integration
        method: POST
    - name: integration-runs
      path: /integrations/runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-integration-run
        method: GET
  - type: http
    namespace: s3
    baseUri: https://s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /{{bucket}}/{{key}}
      inputParameters:
      - name: bucket
        in: path
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
Open in Framework → View in Fleet → workday-eib-data-export.yml

Triggers a Workday Studio integration build, monitors execution status, and on failure creates a GitHub issue and notifies the integration team in Slack.

naftiko: '0.5'
info:
  label: Workday Studio Integration Build Pipeline
  description: Triggers a Workday Studio integration build, monitors execution status, and on failure creates a GitHub issue and notifies the integration team in Slack.
  tags:
  - integrations
  - platform-engineering
  - workday-studio
  - github
  - slack
capability:
  exposes:
  - type: mcp
    namespace: studio-build
    port: 8080
    tools:
    - name: run-studio-integration
      description: Trigger a Workday Studio integration, monitor it, and on failure create a GitHub issue and alert the team.
      inputParameters:
      - name: integration_id
        in: body
        type: string
        description: The Workday Studio integration system ID.
      - name: github_repo
        in: body
        type: string
        description: The GitHub repository (owner/repo) for the integration code.
      - name: team_channel
        in: body
        type: string
        description: The Slack channel for integration team alerts.
      steps:
      - name: trigger-integration
        type: call
        call: workday.launch-integration
        with:
          integration_id: '{{integration_id}}'
      - name: check-status
        type: call
        call: workday.get-integration-run
        with:
          run_id: '{{trigger-integration.run_id}}'
      - name: create-github-issue
        type: call
        call: github.create-issue
        with:
          repo: '{{github_repo}}'
          title: 'Integration failure: {{integration_id}} — run {{trigger-integration.run_id}}'
          body: 'Status: {{check-status.state}}. Records processed: {{check-status.records_processed}}, failed: {{check-status.records_failed}}.'
      - name: notify-team
        type: call
        call: slack.post-message
        with:
          channel: '{{team_channel}}'
          text: 'Studio integration {{integration_id}} run {{trigger-integration.run_id}}: {{check-status.state}}. GitHub issue: {{create-github-issue.html_url}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: integrations
      path: /integrations/{{integration_id}}/launch
      inputParameters:
      - name: integration_id
        in: path
      operations:
      - name: launch-integration
        method: POST
    - name: integration-runs
      path: /integrations/runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-integration-run
        method: GET
  - type: http
    namespace: github
    baseUri: https://api.github.com
    authentication:
      type: bearer
      token: $secrets.github_token
    resources:
    - name: issues
      path: /repos/{{repo}}/issues
      inputParameters:
      - name: repo
        in: path
      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 → workday-studio-integration-build-pipeline.yml

Retrieves the current status of a candidate application in Workday Recruiting, including stage, disposition, and recruiter.

naftiko: '0.5'
info:
  label: Candidate Application Status
  description: Retrieves the current status of a candidate application in Workday Recruiting, including stage, disposition, and recruiter.
  tags:
  - recruiting
  - hr
  - workday-recruiting
capability:
  exposes:
  - type: mcp
    namespace: recruiting-candidate
    port: 8080
    tools:
    - name: get-candidate-status
      description: Look up a candidate application by ID in Workday Recruiting. Returns application stage, disposition reason, and assigned recruiter.
      inputParameters:
      - name: application_id
        in: body
        type: string
        description: The Workday candidate application ID.
      call: workday.get-application
      with:
        app_id: '{{application_id}}'
      outputParameters:
      - name: stage
        type: string
        mapping: $.currentStage
      - name: disposition
        type: string
        mapping: $.dispositionReason
      - name: recruiter
        type: string
        mapping: $.recruiter.fullName
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: applications
      path: /recruiting/applications/{{app_id}}
      inputParameters:
      - name: app_id
        in: path
      operations:
      - name: get-application
        method: GET
Open in Framework → View in Fleet → candidate-application-status.yml

Pulls approved time entries from Workday for a project, pushes hours to the billing system in Salesforce, and updates the project budget tracker in Smartsheet.

naftiko: '0.5'
info:
  label: Time Tracking to Project Billing
  description: Pulls approved time entries from Workday for a project, pushes hours to the billing system in Salesforce, and updates the project budget tracker in Smartsheet.
  tags:
  - hr
  - finance
  - workday
  - salesforce
  - smartsheet
  - time-tracking
capability:
  exposes:
  - type: mcp
    namespace: time-billing
    port: 8080
    tools:
    - name: sync-time-to-billing
      description: Pull approved Workday time entries for a project, push to Salesforce billing, and update Smartsheet budget tracker.
      inputParameters:
      - name: project_id
        in: body
        type: string
        description: The Workday project ID.
      - name: billing_period
        in: body
        type: string
        description: The billing period in YYYY-MM format.
      - name: sheet_id
        in: body
        type: string
        description: The Smartsheet sheet ID for budget tracking.
      steps:
      - name: get-time-entries
        type: call
        call: workday.get-project-time
        with:
          project_id: '{{project_id}}'
          period: '{{billing_period}}'
      - name: create-billing-record
        type: call
        call: salesforce.create-billing
        with:
          project_id: '{{project_id}}'
          hours: '{{get-time-entries.total_hours}}'
          amount: '{{get-time-entries.total_billable_amount}}'
          period: '{{billing_period}}'
      - name: update-budget-sheet
        type: call
        call: smartsheet.add-row
        with:
          sheet_id: '{{sheet_id}}'
          cells:
            project: '{{project_id}}'
            period: '{{billing_period}}'
            hours: '{{get-time-entries.total_hours}}'
            billed: '{{get-time-entries.total_billable_amount}}'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: project-time
      path: /time_tracking/projects/{{project_id}}/entries
      inputParameters:
      - name: project_id
        in: path
      - name: period
        in: query
      operations:
      - name: get-project-time
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://workday.my.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: billing
      path: /sobjects/Billing__c
      operations:
      - name: create-billing
        method: POST
  - type: http
    namespace: smartsheet
    baseUri: https://api.smartsheet.com/2.0
    authentication:
      type: bearer
      token: $secrets.smartsheet_token
    resources:
    - name: rows
      path: /sheets/{{sheet_id}}/rows
      inputParameters:
      - name: sheet_id
        in: path
      operations:
      - name: add-row
        method: POST
Open in Framework → View in Fleet → time-tracking-to-project-billing.yml

When a new supplier is created in Workday, validates the vendor tax ID against an IRS TIN check service, provisions the supplier in Coupa for procurement, and notifies accounts payable in Slack.

naftiko: '0.5'
info:
  label: Supplier Onboarding Pipeline
  description: When a new supplier is created in Workday, validates the vendor tax ID against an IRS TIN check service, provisions the supplier in Coupa for procurement, and notifies accounts payable in Slack.
  tags:
  - finance
  - procurement
  - workday-financials
  - coupa
  - slack
capability:
  exposes:
  - type: mcp
    namespace: supplier-onboarding
    port: 8080
    tools:
    - name: onboard-supplier
      description: Validate a new Workday supplier's tax ID, provision in Coupa, and notify AP in Slack.
      inputParameters:
      - name: supplier_id
        in: body
        type: string
        description: The Workday supplier ID.
      - name: ap_channel
        in: body
        type: string
        description: The Slack channel for accounts payable notifications.
      steps:
      - name: get-supplier
        type: call
        call: workday.get-supplier
        with:
          supplier_id: '{{supplier_id}}'
      - name: validate-tin
        type: call
        call: tin-check.validate
        with:
          tin: '{{get-supplier.tax_id}}'
          name: '{{get-supplier.supplier_name}}'
      - name: create-coupa-supplier
        type: call
        call: coupa.create-supplier
        with:
          name: '{{get-supplier.supplier_name}}'
          tax_id: '{{get-supplier.tax_id}}'
          payment_terms: '{{get-supplier.payment_terms}}'
      - name: notify-ap
        type: call
        call: slack.post-message
        with:
          channel: '{{ap_channel}}'
          text: 'New supplier onboarded: {{get-supplier.supplier_name}} (TIN verified: {{validate-tin.is_valid}}). Coupa ID: {{create-coupa-supplier.supplier_id}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: suppliers
      path: /financial_management/suppliers/{{supplier_id}}
      inputParameters:
      - name: supplier_id
        in: path
      operations:
      - name: get-supplier
        method: GET
  - type: http
    namespace: tin-check
    baseUri: https://api.tincheck.com/api/v1
    authentication:
      type: bearer
      token: $secrets.tincheck_token
    resources:
    - name: validation
      path: /validate
      operations:
      - name: validate
        method: POST
  - type: http
    namespace: coupa
    baseUri: https://workday.coupahost.com/api
    authentication:
      type: bearer
      token: $secrets.coupa_token
    resources:
    - name: suppliers
      path: /suppliers
      operations:
      - name: create-supplier
        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 → supplier-onboarding-pipeline.yml

Retrieves details of an open job requisition in Workday Recruiting, including title, hiring manager, department, and posting status.

naftiko: '0.5'
info:
  label: Open Position Lookup
  description: Retrieves details of an open job requisition in Workday Recruiting, including title, hiring manager, department, and posting status.
  tags:
  - recruiting
  - hr
  - workday-recruiting
capability:
  exposes:
  - type: mcp
    namespace: recruiting
    port: 8080
    tools:
    - name: get-job-requisition
      description: Look up a Workday job requisition by ID. Returns title, hiring manager, department, location, and current status.
      inputParameters:
      - name: requisition_id
        in: body
        type: string
        description: The Workday job requisition ID.
      call: workday.get-requisition
      with:
        req_id: '{{requisition_id}}'
      outputParameters:
      - name: title
        type: string
        mapping: $.jobTitle
      - name: hiring_manager
        type: string
        mapping: $.hiringManager.fullName
      - name: department
        type: string
        mapping: $.department
      - name: status
        type: string
        mapping: $.status
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.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
Open in Framework → View in Fleet → open-position-lookup.yml

When a compensation change is proposed in Workday, fetches the current and proposed amounts, routes for manager approval, and notifies HR and the employee in Slack upon completion.

naftiko: '0.5'
info:
  label: Compensation Change Approval Pipeline
  description: When a compensation change is proposed in Workday, fetches the current and proposed amounts, routes for manager approval, and notifies HR and the employee in Slack upon completion.
  tags:
  - hr
  - compensation
  - workday
  - slack
  - approval
capability:
  exposes:
  - type: mcp
    namespace: comp-approval
    port: 8080
    tools:
    - name: route-comp-change
      description: Given a compensation change event ID, fetch details from Workday, get manager approval context, and notify stakeholders in Slack.
      inputParameters:
      - name: comp_event_id
        in: body
        type: string
        description: The Workday compensation change event ID.
      - name: hr_channel
        in: body
        type: string
        description: The Slack channel ID for HR notifications.
      steps:
      - name: get-comp-event
        type: call
        call: workday.get-comp-event
        with:
          event_id: '{{comp_event_id}}'
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-comp-event.worker_id}}'
      - name: get-manager
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-employee.manager_id}}'
      - name: notify-hr
        type: call
        call: slack.post-message
        with:
          channel: '{{hr_channel}}'
          text: 'Comp change approved for {{get-employee.full_name}}: {{get-comp-event.current_amount}} -> {{get-comp-event.proposed_amount}} ({{get-comp-event.reason}}). Approved by {{get-manager.full_name}}.'
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: comp-events
      path: /compensation/events/{{event_id}}
      inputParameters:
      - name: event_id
        in: path
      operations:
      - name: get-comp-event
        method: GET
    - name: workers
      path: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → compensation-change-approval-pipeline.yml

Fetches a Workday payroll run summary by pay period, returning total gross, net, deductions, and headcount for the period.

naftiko: '0.5'
info:
  label: Payroll Run Summary
  description: Fetches a Workday payroll run summary by pay period, returning total gross, net, deductions, and headcount for the period.
  tags:
  - payroll
  - finance
  - workday-payroll
capability:
  exposes:
  - type: mcp
    namespace: payroll-summary
    port: 8080
    tools:
    - name: get-payroll-summary
      description: Retrieve a Workday payroll run summary for a given pay period. Returns gross pay, net pay, total deductions, and headcount.
      inputParameters:
      - name: pay_period_id
        in: body
        type: string
        description: The Workday pay period identifier (e.g. 2026-Q1-biweekly-06).
      call: workday.get-payroll-summary
      with:
        period_id: '{{pay_period_id}}'
      outputParameters:
      - name: total_gross
        type: number
        mapping: $.totalGross
      - name: total_net
        type: number
        mapping: $.totalNet
      - name: total_deductions
        type: number
        mapping: $.totalDeductions
      - name: headcount
        type: integer
        mapping: $.headcount
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: payroll-runs
      path: /payroll/runs/{{period_id}}/summary
      inputParameters:
      - name: period_id
        in: path
      operations:
      - name: get-payroll-summary
        method: GET
Open in Framework → View in Fleet → payroll-run-summary.yml

Checks the execution status of a Workday Integration (EIB or Studio integration) by run ID, returning completion state, record counts, and error summary.

naftiko: '0.5'
info:
  label: Integration Run Status
  description: Checks the execution status of a Workday Integration (EIB or Studio integration) by run ID, returning completion state, record counts, and error summary.
  tags:
  - integrations
  - platform
  - workday-integrations
capability:
  exposes:
  - type: mcp
    namespace: integration-status
    port: 8080
    tools:
    - name: get-integration-run
      description: Check the status of a Workday integration run. Returns state, records processed, records failed, and completion time.
      inputParameters:
      - name: integration_run_id
        in: body
        type: string
        description: The Workday integration run ID.
      call: workday.get-integration-run
      with:
        run_id: '{{integration_run_id}}'
      outputParameters:
      - name: state
        type: string
        mapping: $.status
      - name: records_processed
        type: number
        mapping: $.recordsProcessed
      - name: records_failed
        type: number
        mapping: $.recordsFailed
      - name: completed_at
        type: string
        mapping: $.completedDateTime
  consumes:
  - type: http
    namespace: workday
    baseUri: https://wd5-services1.myworkday.com/ccx/api/v1
    authentication:
      type: bearer
      token: $secrets.workday_token
    resources:
    - name: integration-runs
      path: /integrations/runs/{{run_id}}
      inputParameters:
      - name: run_id
        in: path
      operations:
      - name: get-integration-run
        method: GET
Open in Framework → View in Fleet → integration-run-status.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.workday.com/analytics/v1
    authentication:
      type: bearer
      token: $secrets.workday_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.workday.com/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.workday.com/v2
    authentication:
      type: bearer
      token: $secrets.workday_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

Retrieves absence calendar for a department.

naftiko: '0.5'
info:
  label: Absence Calendar Lookup
  description: Retrieves absence calendar for a department.
  tags:
  - hr
  - scheduling
capability:
  exposes:
  - type: mcp
    namespace: hr
    port: 8080
    tools:
    - name: get-absence
      description: Retrieves absence calendar for a department.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The absence calendar lookup identifier.
      call: hr-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: hr-api
    baseUri: https://api.workday.com/hr/v1
    authentication:
      type: bearer
      token: $secrets.workday_api_token
    resources:
    - name: absence
      path: /absence/calendar/lookup/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-absence
        method: GET
Open in Framework → View in Fleet → absence-calendar-lookup.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.workday.com/collaboration/v1
    authentication:
      type: bearer
      token: $secrets.workday_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 a Zoom user profile by user ID or email, returning display name, email, role, plan type, and account status.

naftiko: '0.5'
info:
  label: User Account Profile
  description: Retrieves a Zoom user profile by user ID or email, returning display name, email, role, plan type, and account status.
  tags:
  - communications
  - administration
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-admin
    port: 8080
    tools:
    - name: get-user-profile
      description: Look up a Zoom user profile by user ID or email.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Zoom user ID or email address.
      call: zoom.get-user
      with:
        user_id: '{{user_id}}'
      outputParameters:
      - name: display_name
        type: string
        mapping: $.display_name
      - name: email
        type: string
        mapping: $.email
      - name: role_name
        type: string
        mapping: $.role_name
      - name: plan_type
        type: number
        mapping: $.type
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: users
      path: /users/{{user_id}}
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-user
        method: GET
Open in Framework → View in Fleet → user-account-profile.yml

For a Zoom user, lists all meetings from the previous day, retrieves AI Companion summaries for each, and compiles them into a single email sent via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Daily Meeting Summary Digest
  description: For a Zoom user, lists all meetings from the previous day, retrieves AI Companion summaries for each, and compiles them into a single email sent via Microsoft Outlook.
  tags:
  - communications
  - meetings
  - ai-companion
  - microsoft-outlook
  - productivity
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-daily-digest
    port: 8080
    tools:
    - name: send-daily-meeting-digest
      description: Given a Zoom user email and date, compile AI summaries for all meetings that day and email the digest.
      inputParameters:
      - name: user_email
        in: body
        type: string
        description: The Zoom user email.
      - name: date
        in: body
        type: string
        description: The date to summarize in YYYY-MM-DD format.
      steps:
      - name: list-meetings
        type: call
        call: zoom.list-user-meetings
        with:
          user_id: '{{user_email}}'
          type: previous_meetings
          from: '{{date}}'
          to: '{{date}}'
      - name: get-summary
        type: call
        call: zoom.get-ai-summary
        with:
          meeting_id: '{{list-meetings.meetings[0].uuid}}'
      - name: send-digest
        type: call
        call: outlook.send-mail
        with:
          user_upn: '{{user_email}}'
          to: '{{user_email}}'
          subject: Your Zoom Meeting Digest for {{date}}
          body: 'Meetings attended: {{list-meetings.total_records}}


            1. {{list-meetings.meetings[0].topic}}

            Summary: {{get-summary.summary_text}}

            Action Items: {{get-summary.action_items}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: user-meetings
      path: /users/{{user_id}}/meetings
      inputParameters:
      - name: user_id
        in: path
      - name: type
        in: query
      - name: from
        in: query
      - name: to
        in: query
      operations:
      - name: list-user-meetings
        method: GET
    - name: meeting-summaries
      path: /meetings/{{meeting_id}}/meeting_summary
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-ai-summary
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{user_upn}}/sendMail
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → daily-meeting-summary-digest.yml

After a Zoom meeting, retrieves the AI Companion action items and creates corresponding tasks in an Asana project, then notifies the host via Zoom Team Chat.

naftiko: '0.5'
info:
  label: Zoom Meeting to Asana Task Creator
  description: After a Zoom meeting, retrieves the AI Companion action items and creates corresponding tasks in an Asana project, then notifies the host via Zoom Team Chat.
  tags:
  - communications
  - meetings
  - ai-companion
  - asana
  - team-chat
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-asana-tasks
    port: 8080
    tools:
    - name: create-tasks-from-meeting
      description: Given a Zoom meeting UUID and Asana project ID, extract AI action items and create Asana tasks.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      - name: asana_project_id
        in: body
        type: string
        description: The Asana project GID.
      steps:
      - name: get-summary
        type: call
        call: zoom.get-ai-summary
        with:
          meeting_id: '{{meeting_id}}'
      - name: get-meeting
        type: call
        call: zoom.get-meeting-info
        with:
          meeting_id: '{{meeting_id}}'
      - name: create-task
        type: call
        call: asana.create-task
        with:
          project_id: '{{asana_project_id}}'
          name: 'Action item from: {{get-meeting.topic}}'
          notes: '{{get-summary.action_items}}'
      - name: notify-host
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{get-meeting.host_email}}'
          message: 'Action items from ''{{get-meeting.topic}}'' have been added to Asana: {{create-task.permalink_url}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meeting-summaries
      path: /meetings/{{meeting_id}}/meeting_summary
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-ai-summary
        method: GET
    - name: meetings
      path: /meetings/{{meeting_id}}
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-info
        method: GET
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        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
Open in Framework → View in Fleet → zoom-meeting-to-asana-task-creator.yml

Retrieves Zoom Phone voicemail recordings, fetches the AI transcription, and forwards the transcript as an email via Microsoft Outlook to the user.

naftiko: '0.5'
info:
  label: Phone Voicemail Transcription to Email
  description: Retrieves Zoom Phone voicemail recordings, fetches the AI transcription, and forwards the transcript as an email via Microsoft Outlook to the user.
  tags:
  - communications
  - zoom-phone
  - ai-companion
  - microsoft-outlook
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-phone-voicemail
    port: 8080
    tools:
    - name: forward-voicemail-transcript
      description: Given a Zoom Phone user and voicemail ID, transcribe and email the voicemail content via Outlook.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Zoom user ID or email.
      - name: voicemail_id
        in: body
        type: string
        description: The voicemail message ID.
      steps:
      - name: get-voicemail
        type: call
        call: zoom.get-voicemail
        with:
          user_id: '{{user_id}}'
          voicemail_id: '{{voicemail_id}}'
      - name: send-email
        type: call
        call: outlook.send-mail
        with:
          user_upn: '{{user_id}}'
          to: '{{user_id}}'
          subject: Voicemail from {{get-voicemail.caller_number}} at {{get-voicemail.date_time}}
          body: 'Transcription:

            {{get-voicemail.transcript}}


            Caller: {{get-voicemail.caller_name}} ({{get-voicemail.caller_number}})

            Duration: {{get-voicemail.duration}} seconds'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: voicemails
      path: /phone/users/{{user_id}}/voice_mails/{{voicemail_id}}
      inputParameters:
      - name: user_id
        in: path
      - name: voicemail_id
        in: path
      operations:
      - name: get-voicemail
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{user_upn}}/sendMail
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → phone-voicemail-transcription-to-email.yml

Retrieves the Zoom AI Companion meeting summary, analyzes overall sentiment from the summary text, and posts a sentiment report to a Slack channel for leadership visibility.

naftiko: '0.5'
info:
  label: Meeting Sentiment Analysis to Slack
  description: Retrieves the Zoom AI Companion meeting summary, analyzes overall sentiment from the summary text, and posts a sentiment report to a Slack channel for leadership visibility.
  tags:
  - communications
  - meetings
  - ai-companion
  - slack
  - analytics
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-sentiment
    port: 8080
    tools:
    - name: analyze-meeting-sentiment
      description: Given a Zoom meeting UUID and Slack channel, retrieve the AI summary and post a sentiment analysis to Slack.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for sentiment reports.
      steps:
      - name: get-summary
        type: call
        call: zoom.get-ai-summary
        with:
          meeting_id: '{{meeting_id}}'
      - name: get-meeting
        type: call
        call: zoom.get-meeting-info
        with:
          meeting_id: '{{meeting_id}}'
      - name: post-sentiment
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Meeting Sentiment Report: ''{{get-meeting.topic}}''


            Summary: {{get-summary.summary_text}}

            Action Items: {{get-summary.action_items}}

            Participants: {{get-meeting.participants_count}}

            Duration: {{get-meeting.duration}} minutes'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meeting-summaries
      path: /meetings/{{meeting_id}}/meeting_summary
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-ai-summary
        method: GET
    - name: meetings
      path: /meetings/{{meeting_id}}
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-info
        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 → meeting-sentiment-analysis-to-slack.yml

Checks the health status of a room connector.

naftiko: '0.5'
info:
  label: Room Connector Health
  description: Checks the health status of a room connector.
  tags:
  - infrastructure
  - monitoring
capability:
  exposes:
  - type: mcp
    namespace: infrastructure
    port: 8080
    tools:
    - name: get-room
      description: Checks the health status of a room connector.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The room connector health identifier.
      call: infrastructure-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: infrastructure-api
    baseUri: https://api.zoom.com/infrastructure/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: room
      path: /room/connector/health/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-room
        method: GET
Open in Framework → View in Fleet → room-connector-health.yml

Pulls Zoom Dashboard QoS metrics for a meeting and pushes custom metrics to Datadog for monitoring. If latency exceeds threshold, sends a Slack alert.

naftiko: '0.5'
info:
  label: Meeting Quality Alert to Datadog
  description: Pulls Zoom Dashboard QoS metrics for a meeting and pushes custom metrics to Datadog for monitoring. If latency exceeds threshold, sends a Slack alert.
  tags:
  - communications
  - meetings
  - monitoring
  - datadog
  - slack
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-quality-monitoring
    port: 8080
    tools:
    - name: report-meeting-quality
      description: Given a Zoom meeting UUID and latency threshold, push QoS metrics to Datadog and alert Slack if degraded.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      - name: latency_threshold_ms
        in: body
        type: number
        description: Latency threshold in milliseconds for alerting.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for quality alerts.
      steps:
      - name: get-qos
        type: call
        call: zoom.get-meeting-qos
        with:
          meeting_id: '{{meeting_id}}'
      - name: push-metrics
        type: call
        call: datadog.submit-metrics
        with:
          series:
            metric: zoom.meeting.latency
            points: '{{get-qos.audio_input.latency}}'
            tags:
            - meeting_id:{{meeting_id}}
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Zoom Quality Alert: Meeting {{meeting_id}} audio latency is {{get-qos.audio_input.latency}}ms (threshold: {{latency_threshold_ms}}ms). Jitter: {{get-qos.audio_input.jitter}}ms, Packet Loss: {{get-qos.audio_input.avg_loss}}%'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meeting-qos
      path: /metrics/meetings/{{meeting_id}}/participants/qos
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-qos
        method: GET
  - type: http
    namespace: datadog
    baseUri: https://api.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: metrics
      path: /series
      operations:
      - name: submit-metrics
        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 → meeting-quality-alert-to-datadog.yml

Fetches the call log history for a Zoom Phone user within a date range, including caller, callee, direction, duration, and result.

naftiko: '0.5'
info:
  label: Phone Call Log Retrieval
  description: Fetches the call log history for a Zoom Phone user within a date range, including caller, callee, direction, duration, and result.
  tags:
  - communications
  - zoom-phone
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-phone
    port: 8080
    tools:
    - name: get-call-logs
      description: Retrieve Zoom Phone call log entries for a user within a date range.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Zoom user ID or email.
      - name: from_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: to_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: zoom.list-call-logs
      with:
        user_id: '{{user_id}}'
        from: '{{from_date}}'
        to: '{{to_date}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: call-logs
      path: /phone/users/{{user_id}}/call_logs
      inputParameters:
      - name: user_id
        in: path
      - name: from
        in: query
      - name: to
        in: query
      operations:
      - name: list-call-logs
        method: GET
Open in Framework → View in Fleet → phone-call-log-retrieval.yml

Pulls meeting quality-of-service data from the Zoom Dashboard API, including audio/video bitrate, latency, jitter, and packet loss for diagnostics.

naftiko: '0.5'
info:
  label: Dashboard Meeting Quality
  description: Pulls meeting quality-of-service data from the Zoom Dashboard API, including audio/video bitrate, latency, jitter, and packet loss for diagnostics.
  tags:
  - communications
  - meetings
  - monitoring
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-dashboard
    port: 8080
    tools:
    - name: get-meeting-quality
      description: Fetch QoS metrics for a Zoom meeting from the Dashboard API.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      call: zoom.get-meeting-qos
      with:
        meeting_id: '{{meeting_id}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: dashboard-meeting-qos
      path: /metrics/meetings/{{meeting_id}}/participants/qos
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-qos
        method: GET
Open in Framework → View in Fleet → dashboard-meeting-quality.yml

Retrieves the status and URL of a meeting recording.

naftiko: '0.5'
info:
  label: Meeting Recording Status
  description: Retrieves the status and URL of a meeting recording.
  tags:
  - meetings
  - content-management
capability:
  exposes:
  - type: mcp
    namespace: meetings
    port: 8080
    tools:
    - name: get-meeting
      description: Retrieves the status and URL of a meeting recording.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The meeting recording status identifier.
      call: meetings-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: meetings-api
    baseUri: https://api.zoom.com/meetings/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: meeting
      path: /meeting/recording/status/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-meeting
        method: GET
Open in Framework → View in Fleet → meeting-recording-status.yml

Retrieves the full inventory of Zoom Phone numbers for the account, including assignment status and site, and writes the inventory to a Google Sheet for telecom management.

naftiko: '0.5'
info:
  label: Zoom Phone Number Inventory Report
  description: Retrieves the full inventory of Zoom Phone numbers for the account, including assignment status and site, and writes the inventory to a Google Sheet for telecom management.
  tags:
  - communications
  - zoom-phone
  - google-sheets
  - administration
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-phone-inventory
    port: 8080
    tools:
    - name: export-phone-inventory
      description: Export Zoom Phone number inventory to a Google Sheet.
      inputParameters:
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      steps:
      - name: list-numbers
        type: call
        call: zoom.list-phone-numbers
        with: {}
      - name: write-sheet
        type: call
        call: gsheets.update-values
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: PhoneInventory!A1
          values:
          - '{{list-numbers.phone_numbers[0].number}}'
          - '{{list-numbers.phone_numbers[0].assignee.name}}'
          - '{{list-numbers.phone_numbers[0].site.name}}'
          - '{{list-numbers.phone_numbers[0].status}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: phone-numbers
      path: /phone/numbers
      operations:
      - name: list-phone-numbers
        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 → zoom-phone-number-inventory-report.yml

Lists all registered panelists for a Zoom webinar, returning name, email, and join URL for each.

naftiko: '0.5'
info:
  label: Webinar Panelist Lookup
  description: Lists all registered panelists for a Zoom webinar, returning name, email, and join URL for each.
  tags:
  - communications
  - webinars
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-webinars
    port: 8080
    tools:
    - name: list-webinar-panelists
      description: Get all panelists for a Zoom webinar by webinar ID.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      call: zoom.get-panelists
      with:
        webinar_id: '{{webinar_id}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: panelists
      path: /webinars/{{webinar_id}}/panelists
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-panelists
        method: GET
Open in Framework → View in Fleet → webinar-panelist-lookup.yml

After a Zoom Contact Center engagement, sends a CSAT survey link via Zoom Team Chat to the customer and logs the survey send event to Salesforce as an activity.

naftiko: '0.5'
info:
  label: Contact Center CSAT Survey via Zoom
  description: After a Zoom Contact Center engagement, sends a CSAT survey link via Zoom Team Chat to the customer and logs the survey send event to Salesforce as an activity.
  tags:
  - communications
  - contact-center
  - team-chat
  - salesforce
  - customer-satisfaction
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-cc-csat
    port: 8080
    tools:
    - name: send-csat-survey
      description: Given a Contact Center engagement ID, customer email, and survey URL, send the survey and log to Salesforce.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The Zoom Contact Center engagement ID.
      - name: customer_email
        in: body
        type: string
        description: The customer email address.
      - name: survey_url
        in: body
        type: string
        description: The CSAT survey URL.
      steps:
      - name: get-engagement
        type: call
        call: zoom.get-engagement-details
        with:
          engagement_id: '{{engagement_id}}'
      - name: send-survey
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{customer_email}}'
          message: 'Thank you for contacting us. Please take a moment to rate your experience: {{survey_url}}'
      - name: log-salesforce
        type: call
        call: salesforce.create-task
        with:
          subject: CSAT survey sent - Engagement {{engagement_id}}
          description: 'Survey sent to {{customer_email}} after engagement with agent {{get-engagement.agent_name}}. Channel: {{get-engagement.channel}}.'
          status: Completed
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: engagements
      path: /contact_center/engagements/{{engagement_id}}
      inputParameters:
      - name: engagement_id
        in: path
      operations:
      - name: get-engagement-details
        method: GET
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://your-instance.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → contact-center-csat-survey-via-zoom.yml

After a Zoom meeting ends, retrieves the AI Companion summary, extracts action items, creates Jira tickets for each, and posts a recap to a Slack channel.

naftiko: '0.5'
info:
  label: Post-Meeting Action Item Dispatcher
  description: After a Zoom meeting ends, retrieves the AI Companion summary, extracts action items, creates Jira tickets for each, and posts a recap to a Slack channel.
  tags:
  - communications
  - meetings
  - ai-companion
  - jira
  - slack
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-post-meeting
    port: 8080
    tools:
    - name: dispatch-action-items
      description: Given a completed Zoom meeting ID and target Jira project key and Slack channel, extract AI Companion action items, create Jira issues, and post a summary to Slack.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      - name: jira_project_key
        in: body
        type: string
        description: The Jira project key for new tickets.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the recap.
      steps:
      - name: get-summary
        type: call
        call: zoom.get-ai-summary
        with:
          meeting_id: '{{meeting_id}}'
      - name: create-jira-tickets
        type: call
        call: jira.create-issue
        with:
          project_key: '{{jira_project_key}}'
          summary: Action item from Zoom meeting {{meeting_id}}
          description: '{{get-summary.action_items}}'
          issue_type: Task
      - name: post-slack-recap
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Meeting Recap for {{meeting_id}}:


            Summary: {{get-summary.summary_text}}


            Action items tracked in Jira: {{create-jira-tickets.key}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meeting-summaries
      path: /meetings/{{meeting_id}}/meeting_summary
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-ai-summary
        method: GET
  - type: http
    namespace: jira
    baseUri: https://your-domain.atlassian.net/rest/api/3
    authentication:
      type: basic
      username: $secrets.jira_user
      password: $secrets.jira_api_token
    resources:
    - name: issues
      path: /issue
      operations:
      - name: create-issue
        method: POST
  - type: http
    namespace: slack
    baseUri: https://slack.com/api
    authentication:
      type: bearer
      token: $secrets.slack_bot_token
    resources:
    - name: messages
      path: /chat.postMessage
      operations:
      - name: post-message
        method: POST
Open in Framework → View in Fleet → post-meeting-action-item-dispatcher.yml

When a file is shared in a Zoom Team Chat channel, downloads the file metadata and uploads a copy to a Box folder for enterprise content management.

naftiko: '0.5'
info:
  label: Zoom Team Chat File Share to Box
  description: When a file is shared in a Zoom Team Chat channel, downloads the file metadata and uploads a copy to a Box folder for enterprise content management.
  tags:
  - communications
  - team-chat
  - box
  - content-management
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-chat-box
    port: 8080
    tools:
    - name: sync-chat-file-to-box
      description: Given a Zoom Team Chat file ID and Box folder ID, fetch file metadata and upload to Box.
      inputParameters:
      - name: file_id
        in: body
        type: string
        description: The Zoom Team Chat file ID.
      - name: box_folder_id
        in: body
        type: string
        description: The Box folder ID.
      steps:
      - name: get-file
        type: call
        call: zoom.get-chat-file
        with:
          file_id: '{{file_id}}'
      - name: upload-to-box
        type: call
        call: box.upload-file
        with:
          folder_id: '{{box_folder_id}}'
          file_name: '{{get-file.file_name}}'
          download_url: '{{get-file.download_url}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: chat-files
      path: /chat/files/{{file_id}}
      inputParameters:
      - name: file_id
        in: path
      operations:
      - name: get-chat-file
        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 → zoom-team-chat-file-share-to-box.yml

Orchestrates video conferencing workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 2
  description: Orchestrates video conferencing workflow 2 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-002
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 2 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-2.yml

Retrieves video conferencing operational data for workflow 3.

naftiko: '0.5'
info:
  label: Video Conferencing Data Query 3
  description: Retrieves video conferencing operational data for workflow 3.
  tags:
  - video
  - operations
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: get-data-3
      description: Query video conferencing data for workflow 3.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: video-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: video-api
    baseUri: https://api.zoom.com/video-conferencing/v1
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-data-query-3.yml

After a Zoom meeting ends, compares invited attendees against actual participants. For each no-show, sends a follow-up email via Microsoft Outlook and logs to a Salesforce activity.

naftiko: '0.5'
info:
  label: Meeting No-Show Follow-Up
  description: After a Zoom meeting ends, compares invited attendees against actual participants. For each no-show, sends a follow-up email via Microsoft Outlook and logs to a Salesforce activity.
  tags:
  - communications
  - meetings
  - microsoft-outlook
  - salesforce
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-meeting-followup
    port: 8080
    tools:
    - name: follow-up-no-shows
      description: Given a Zoom meeting ID and host email, identify attendees who did not join and send follow-up emails plus log in Salesforce.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      - name: host_email
        in: body
        type: string
        description: The meeting host email.
      steps:
      - name: get-meeting
        type: call
        call: zoom.get-meeting-details
        with:
          meeting_id: '{{meeting_id}}'
      - name: get-participants
        type: call
        call: zoom.get-participant-report
        with:
          meeting_id: '{{meeting_id}}'
      - name: send-followup
        type: call
        call: outlook.send-mail
        with:
          user_upn: '{{host_email}}'
          to: '{{get-meeting.settings.alternative_hosts}}'
          subject: 'Missed: {{get-meeting.topic}}'
          body: You were invited to '{{get-meeting.topic}}' but were not detected among attendees. Would you like to reschedule? Meeting recording may be available.
      - name: log-activity
        type: call
        call: salesforce.create-task
        with:
          subject: 'Zoom meeting no-show follow-up: {{get-meeting.topic}}'
          description: 'Meeting {{meeting_id}} on {{get-meeting.start_time}}. Participants: {{get-participants.total_records}}. Follow-up sent.'
          status: Completed
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meetings
      path: /meetings/{{meeting_id}}
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-details
        method: GET
    - name: participant-report
      path: /report/meetings/{{meeting_id}}/participants
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-participant-report
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{user_upn}}/sendMail
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: send-mail
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://your-instance.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: tasks
      path: /sobjects/Task
      operations:
      - name: create-task
        method: POST
Open in Framework → View in Fleet → meeting-no-show-follow-up.yml

After a Zoom webinar, fetches the Q&A report, creates a Salesforce case for each unanswered question, and notifies the sales team via Microsoft Teams.

naftiko: '0.5'
info:
  label: Customer Webinar Follow-Up Pipeline
  description: After a Zoom webinar, fetches the Q&A report, creates a Salesforce case for each unanswered question, and notifies the sales team via Microsoft Teams.
  tags:
  - communications
  - webinars
  - salesforce
  - microsoft-teams
  - customer-service
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-webinar-followup
    port: 8080
    tools:
    - name: process-webinar-questions
      description: Given a Zoom webinar ID, fetch unanswered Q&A, create Salesforce cases, and notify the sales team in Teams.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      - name: teams_channel_webhook
        in: body
        type: string
        description: Microsoft Teams incoming webhook URL.
      steps:
      - name: get-qa-report
        type: call
        call: zoom.get-webinar-qa
        with:
          webinar_id: '{{webinar_id}}'
      - name: get-webinar
        type: call
        call: zoom.get-webinar-info
        with:
          webinar_id: '{{webinar_id}}'
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          subject: Unanswered webinar question from {{get-qa-report.questions[0].email}}
          description: 'Question: {{get-qa-report.questions[0].question}}

            Webinar: {{get-webinar.topic}}

            Asked by: {{get-qa-report.questions[0].name}}'
          origin: Zoom Webinar
      - name: notify-teams
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: '{{teams_channel_webhook}}'
          text: 'New unanswered webinar question from {{get-qa-report.questions[0].name}}: ''{{get-qa-report.questions[0].question}}''. Salesforce case: {{create-case.id}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: webinar-qa
      path: /report/webinars/{{webinar_id}}/qa
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar-qa
        method: GET
    - name: webinars
      path: /webinars/{{webinar_id}}
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar-info
        method: GET
  - type: http
    namespace: salesforce
    baseUri: https://your-instance.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: msteams
    baseUri: '{{teams_channel_webhook}}'
    authentication:
      type: none
    resources:
    - name: webhook
      path: ''
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → customer-webinar-follow-up-pipeline.yml

Retrieves video conferencing operational data for workflow 15.

naftiko: '0.5'
info:
  label: Video Conferencing Data Query 15
  description: Retrieves video conferencing operational data for workflow 15.
  tags:
  - video
  - operations
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: get-data-15
      description: Query video conferencing data for workflow 15.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: video-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: video-api
    baseUri: https://api.zoom.com/video-conferencing/v1
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-data-query-15.yml

Orchestrates video conferencing workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 1
  description: Orchestrates video conferencing workflow 1 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-001
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 1 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-1.yml

Retrieves Zoom cloud recordings for a user, checks file age against a retention policy, and deletes recordings older than the threshold. Logs each deletion to a Confluence audit page.

naftiko: '0.5'
info:
  label: Recording Compliance Checker
  description: Retrieves Zoom cloud recordings for a user, checks file age against a retention policy, and deletes recordings older than the threshold. Logs each deletion to a Confluence audit page.
  tags:
  - communications
  - recordings
  - compliance
  - confluence
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-recording-compliance
    port: 8080
    tools:
    - name: enforce-recording-retention
      description: Given a Zoom user and retention period in days, list recordings, identify expired ones, delete them, and log to Confluence.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Zoom user ID or email.
      - name: retention_days
        in: body
        type: number
        description: Maximum age in days for recordings.
      - name: confluence_page_id
        in: body
        type: string
        description: Confluence page ID for the audit log.
      steps:
      - name: list-recordings
        type: call
        call: zoom.list-recordings
        with:
          user_id: '{{user_id}}'
      - name: delete-expired
        type: call
        call: zoom.delete-recording
        with:
          meeting_id: '{{list-recordings.meetings[0].uuid}}'
      - name: log-to-confluence
        type: call
        call: confluence.append-page
        with:
          page_id: '{{confluence_page_id}}'
          content: 'Recording deleted for user {{user_id}}: meeting {{list-recordings.meetings[0].topic}} from {{list-recordings.meetings[0].start_time}}. Retention policy: {{retention_days}} days.'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: recordings
      path: /users/{{user_id}}/recordings
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: list-recordings
        method: GET
    - name: recording-files
      path: /meetings/{{meeting_id}}/recordings
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: delete-recording
        method: DELETE
  - type: http
    namespace: confluence
    baseUri: https://your-domain.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: append-page
        method: PUT
Open in Framework → View in Fleet → recording-compliance-checker.yml

Orchestrates video conferencing workflow 14 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 14
  description: Orchestrates video conferencing workflow 14 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-014
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 14 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-14.yml

After a Zoom webinar ends, retrieves poll results and posts a formatted summary to a Slack channel for the marketing team to review.

naftiko: '0.5'
info:
  label: Webinar Poll Results to Slack
  description: After a Zoom webinar ends, retrieves poll results and posts a formatted summary to a Slack channel for the marketing team to review.
  tags:
  - communications
  - webinars
  - slack
  - marketing
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-webinar-polls
    port: 8080
    tools:
    - name: share-poll-results
      description: Given a Zoom webinar ID and Slack channel, fetch poll results and post a summary.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for results.
      steps:
      - name: get-polls
        type: call
        call: zoom.get-webinar-polls
        with:
          webinar_id: '{{webinar_id}}'
      - name: get-webinar
        type: call
        call: zoom.get-webinar-details
        with:
          webinar_id: '{{webinar_id}}'
      - name: post-results
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Poll Results for ''{{get-webinar.topic}}'':


            Total Responses: {{get-polls.total_records}}

            Questions: {{get-polls.questions[0].name}}

            Top Answer: {{get-polls.questions[0].question_details[0].answer}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: webinar-polls
      path: /report/webinars/{{webinar_id}}/polls
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar-polls
        method: GET
    - name: webinars
      path: /webinars/{{webinar_id}}
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar-details
        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 → webinar-poll-results-to-slack.yml

Returns the current status of a Zoom Room device, including online/offline state, health, and active meeting info.

naftiko: '0.5'
info:
  label: Zoom Room Status
  description: Returns the current status of a Zoom Room device, including online/offline state, health, and active meeting info.
  tags:
  - communications
  - zoom-rooms
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-rooms
    port: 8080
    tools:
    - name: get-room-status
      description: Check a Zoom Room's online status, health, and current meeting info.
      inputParameters:
      - name: room_id
        in: body
        type: string
        description: The Zoom Room ID.
      call: zoom.get-room
      with:
        room_id: '{{room_id}}'
      outputParameters:
      - name: status
        type: string
        mapping: $.status
      - name: health
        type: string
        mapping: $.health
      - name: room_name
        type: string
        mapping: $.room_name
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: rooms
      path: /rooms/{{room_id}}
      inputParameters:
      - name: room_id
        in: path
      operations:
      - name: get-room
        method: GET
Open in Framework → View in Fleet → zoom-room-status.yml

Downloads the audio transcript for a recorded Zoom meeting, returning full text with speaker labels and timestamps.

naftiko: '0.5'
info:
  label: Meeting Transcript Retrieval
  description: Downloads the audio transcript for a recorded Zoom meeting, returning full text with speaker labels and timestamps.
  tags:
  - communications
  - recordings
  - ai-companion
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-recordings
    port: 8080
    tools:
    - name: get-meeting-transcript
      description: Fetch the transcript for a Zoom cloud recording by meeting UUID.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      call: zoom.get-transcript
      with:
        meeting_id: '{{meeting_id}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: transcripts
      path: /meetings/{{meeting_id}}/recordings
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-transcript
        method: GET
Open in Framework → View in Fleet → meeting-transcript-retrieval.yml

Updates the digital signage content displayed on a Zoom Room by pushing a new banner message and content URL, then confirms the update in a Slack channel.

naftiko: '0.5'
info:
  label: Zoom Room Digital Signage Updater
  description: Updates the digital signage content displayed on a Zoom Room by pushing a new banner message and content URL, then confirms the update in a Slack channel.
  tags:
  - communications
  - zoom-rooms
  - slack
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-room-signage
    port: 8080
    tools:
    - name: update-room-signage
      description: Given a Zoom Room ID, update its digital signage content and confirm in Slack.
      inputParameters:
      - name: room_id
        in: body
        type: string
        description: The Zoom Room ID.
      - name: banner_message
        in: body
        type: string
        description: The banner text to display.
      - name: content_url
        in: body
        type: string
        description: The URL for signage content.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for confirmation.
      steps:
      - name: update-signage
        type: call
        call: zoom.update-room-signage
        with:
          room_id: '{{room_id}}'
          banner: '{{banner_message}}'
          content_url: '{{content_url}}'
      - name: confirm-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Zoom Room {{room_id}} digital signage updated. Banner: ''{{banner_message}}''. Content: {{content_url}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: room-signage
      path: /rooms/{{room_id}}/settings
      inputParameters:
      - name: room_id
        in: path
      operations:
      - name: update-room-signage
        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 → zoom-room-digital-signage-updater.yml

Retrieves the status and configuration of a Zoom Phone SIP trunk, including registration state, codec settings, and associated phone numbers.

naftiko: '0.5'
info:
  label: Zoom SIP Trunk Status Check
  description: Retrieves the status and configuration of a Zoom Phone SIP trunk, including registration state, codec settings, and associated phone numbers.
  tags:
  - communications
  - zoom-phone
  - telephony
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-sip
    port: 8080
    tools:
    - name: get-sip-trunk-status
      description: Look up SIP trunk registration status and configuration by trunk ID.
      inputParameters:
      - name: trunk_id
        in: body
        type: string
        description: The Zoom Phone SIP trunk ID.
      call: zoom.get-sip-trunk
      with:
        trunk_id: '{{trunk_id}}'
      outputParameters:
      - name: name
        type: string
        mapping: $.name
      - name: status
        type: string
        mapping: $.status
      - name: registration_state
        type: string
        mapping: $.registration.state
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: sip-trunks
      path: /phone/sip_trunk/trunks/{{trunk_id}}
      inputParameters:
      - name: trunk_id
        in: path
      operations:
      - name: get-sip-trunk
        method: GET
Open in Framework → View in Fleet → zoom-sip-trunk-status-check.yml

Orchestrates video conferencing workflow 10 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 10
  description: Orchestrates video conferencing workflow 10 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-010
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 10 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-10.yml

Orchestrates video conferencing workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 4
  description: Orchestrates video conferencing workflow 4 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-004
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 4 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-4.yml

Orchestrates video conferencing workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 5
  description: Orchestrates video conferencing workflow 5 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-005
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 5 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-5.yml

Orchestrates video conferencing workflow 11 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 11
  description: Orchestrates video conferencing workflow 11 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-011
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 11 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-11.yml

Pulls Zoom operation log entries for recording access events and forwards them to Splunk for security audit and compliance monitoring.

naftiko: '0.5'
info:
  label: Meeting Recording Access Audit to Splunk
  description: Pulls Zoom operation log entries for recording access events and forwards them to Splunk for security audit and compliance monitoring.
  tags:
  - communications
  - recordings
  - splunk
  - security
  - compliance
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-recording-audit
    port: 8080
    tools:
    - name: audit-recording-access
      description: Given a date range, pull Zoom recording access logs and forward to Splunk.
      inputParameters:
      - name: from_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: to_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      steps:
      - name: get-operation-logs
        type: call
        call: zoom.get-operation-logs
        with:
          from: '{{from_date}}'
          to: '{{to_date}}'
          category_type: recording
      - name: send-to-splunk
        type: call
        call: splunk.send-event
        with:
          index: zoom_audit
          sourcetype: zoom:recording:access
          event: '{{get-operation-logs.operation_logs}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: operation-logs
      path: /report/operationlogs
      inputParameters:
      - name: from
        in: query
      - name: to
        in: query
      - name: category_type
        in: query
      operations:
      - name: get-operation-logs
        method: GET
  - type: http
    namespace: splunk
    baseUri: https://your-instance.splunkcloud.com:8088
    authentication:
      type: bearer
      token: $secrets.splunk_hec_token
    resources:
    - name: events
      path: /services/collector/event
      operations:
      - name: send-event
        method: POST
Open in Framework → View in Fleet → meeting-recording-access-audit-to-splunk.yml

On new hire detection in Workday, provisions a Zoom user account with the correct license type and adds the user to the appropriate Zoom Team Chat channels based on department.

naftiko: '0.5'
info:
  label: New Employee Zoom Provisioning
  description: On new hire detection in Workday, provisions a Zoom user account with the correct license type and adds the user to the appropriate Zoom Team Chat channels based on department.
  tags:
  - communications
  - administration
  - workday
  - team-chat
  - onboarding
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-user-provisioning
    port: 8080
    tools:
    - name: provision-new-zoom-user
      description: Given a Workday employee ID and department, create a Zoom account and add to department chat channels.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the new hire.
      - name: department
        in: body
        type: string
        description: The department name for channel assignment.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: create-zoom-user
        type: call
        call: zoom.create-user
        with:
          email: '{{get-employee.work_email}}'
          first_name: '{{get-employee.first_name}}'
          last_name: '{{get-employee.last_name}}'
          type: 2
      - name: add-to-channel
        type: call
        call: zoom.add-channel-member
        with:
          channel_name: '{{department}}-general'
          member_email: '{{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: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: users
      path: /users
      operations:
      - name: create-user
        method: POST
    - name: chat-channels
      path: /chat/channels/{{channel_name}}/members
      inputParameters:
      - name: channel_name
        in: path
      operations:
      - name: add-channel-member
        method: POST
Open in Framework → View in Fleet → new-employee-zoom-provisioning.yml

Orchestrates video conferencing workflow 7 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 7
  description: Orchestrates video conferencing workflow 7 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-007
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 7 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-7.yml

Orchestrates video conferencing workflow 13 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 13
  description: Orchestrates video conferencing workflow 13 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-013
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 13 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-13.yml

Retrieves video conferencing operational data for workflow 12.

naftiko: '0.5'
info:
  label: Video Conferencing Data Query 12
  description: Retrieves video conferencing operational data for workflow 12.
  tags:
  - video
  - operations
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: get-data-12
      description: Query video conferencing data for workflow 12.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: video-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: video-api
    baseUri: https://api.zoom.com/video-conferencing/v1
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-data-query-12.yml

Retrieves video conferencing operational data for workflow 6.

naftiko: '0.5'
info:
  label: Video Conferencing Data Query 6
  description: Retrieves video conferencing operational data for workflow 6.
  tags:
  - video
  - operations
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: get-data-6
      description: Query video conferencing data for workflow 6.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: video-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: video-api
    baseUri: https://api.zoom.com/video-conferencing/v1
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-data-query-6.yml

Pulls Zoom account user license utilization data, calculates usage percentages, and posts a weekly summary to a Slack channel for IT governance.

naftiko: '0.5'
info:
  label: Zoom License Usage Report to Slack
  description: Pulls Zoom account user license utilization data, calculates usage percentages, and posts a weekly summary to a Slack channel for IT governance.
  tags:
  - communications
  - administration
  - slack
  - governance
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-license-governance
    port: 8080
    tools:
    - name: report-license-usage
      description: Retrieve Zoom account plan usage and post a summary to Slack.
      inputParameters:
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel ID for the report.
      steps:
      - name: get-plan-usage
        type: call
        call: zoom.get-plan-usage
        with: {}
      - name: post-report
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Zoom License Report:


            Plan: {{get-plan-usage.plan_base.type}}

            Hosts Used: {{get-plan-usage.plan_base.hosts}} / {{get-plan-usage.plan_base.usage}}

            Webinar Add-on: {{get-plan-usage.plan_webinar.hosts}} / {{get-plan-usage.plan_webinar.usage}}

            Zoom Phone: {{get-plan-usage.plan_phone.hosts}} / {{get-plan-usage.plan_phone.usage}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: plan-usage
      path: /accounts/me/plan/usage
      operations:
      - name: get-plan-usage
        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 → zoom-license-usage-report-to-slack.yml

Retrieves the participant report for a past Zoom meeting, returning each attendee name, join time, leave time, and duration. Used for attendance tracking and compliance.

naftiko: '0.5'
info:
  label: Meeting Participant Report
  description: Retrieves the participant report for a past Zoom meeting, returning each attendee name, join time, leave time, and duration. Used for attendance tracking and compliance.
  tags:
  - communications
  - meetings
  - reporting
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-reports
    port: 8080
    tools:
    - name: get-meeting-participants
      description: Fetch the participant report for a completed Zoom meeting by meeting ID.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID or meeting ID.
      call: zoom.get-participant-report
      with:
        meeting_id: '{{meeting_id}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: participant-report
      path: /report/meetings/{{meeting_id}}/participants
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-participant-report
        method: GET
Open in Framework → View in Fleet → meeting-participant-report.yml

Reads auto-attendant IVR configuration from Zoom Phone and backs up the settings as a JSON document in an Amazon S3 bucket for disaster recovery.

naftiko: '0.5'
info:
  label: Zoom Phone Auto-Attendant Config Sync
  description: Reads auto-attendant IVR configuration from Zoom Phone and backs up the settings as a JSON document in an Amazon S3 bucket for disaster recovery.
  tags:
  - communications
  - zoom-phone
  - amazon-s3
  - disaster-recovery
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-phone-backup
    port: 8080
    tools:
    - name: backup-auto-attendant
      description: Given a Zoom Phone auto-attendant ID and S3 bucket, export the configuration to S3.
      inputParameters:
      - name: auto_attendant_id
        in: body
        type: string
        description: The Zoom Phone auto-attendant ID.
      - name: s3_bucket
        in: body
        type: string
        description: The S3 bucket name for backup.
      steps:
      - name: get-config
        type: call
        call: zoom.get-auto-attendant
        with:
          auto_attendant_id: '{{auto_attendant_id}}'
      - name: upload-backup
        type: call
        call: s3.put-object
        with:
          bucket: '{{s3_bucket}}'
          key: zoom-phone-backups/auto-attendant-{{auto_attendant_id}}.json
          body: '{{get-config}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: auto-attendants
      path: /phone/auto_receptionists/{{auto_attendant_id}}
      inputParameters:
      - name: auto_attendant_id
        in: path
      operations:
      - name: get-auto-attendant
        method: GET
  - type: http
    namespace: s3
    baseUri: https://{{s3_bucket}}.s3.amazonaws.com
    authentication:
      type: bearer
      token: $secrets.aws_s3_token
    resources:
    - name: objects
      path: /{{key}}
      inputParameters:
      - name: key
        in: path
      operations:
      - name: put-object
        method: PUT
Open in Framework → View in Fleet → zoom-phone-auto-attendant-config-sync.yml

Receives a Zoom Team Chat chatbot message, identifies customer intent, looks up the customer in Salesforce, and creates a Salesforce case or returns account info based on the request.

naftiko: '0.5'
info:
  label: Zoom Chatbot Intent Router to Salesforce
  description: Receives a Zoom Team Chat chatbot message, identifies customer intent, looks up the customer in Salesforce, and creates a Salesforce case or returns account info based on the request.
  tags:
  - communications
  - team-chat
  - salesforce
  - customer-service
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-chatbot-crm
    port: 8080
    tools:
    - name: route-chatbot-to-crm
      description: Given a Zoom chatbot message, customer email, and intent, look up or create records in Salesforce.
      inputParameters:
      - name: customer_email
        in: body
        type: string
        description: The customer email address.
      - name: intent
        in: body
        type: string
        description: The detected intent (e.g. support_request, account_info).
      - name: message_text
        in: body
        type: string
        description: The original chatbot message.
      steps:
      - name: lookup-contact
        type: call
        call: salesforce.get-contact
        with:
          email: '{{customer_email}}'
      - name: create-case
        type: call
        call: salesforce.create-case
        with:
          contact_id: '{{lookup-contact.Id}}'
          subject: 'Zoom Chatbot: {{intent}}'
          description: 'Customer message: {{message_text}}

            Account: {{lookup-contact.Account.Name}}'
          origin: Zoom Team Chat
      - name: respond-chat
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{customer_email}}'
          message: 'Your request has been logged as case {{create-case.id}}. Account: {{lookup-contact.Account.Name}}. Our team will follow up shortly.'
  consumes:
  - type: http
    namespace: salesforce
    baseUri: https://your-instance.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: contacts
      path: /sobjects/Contact/Email__c/{{email}}
      inputParameters:
      - name: email
        in: path
      operations:
      - name: get-contact
        method: GET
    - name: cases
      path: /sobjects/Case
      operations:
      - name: create-case
        method: POST
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        method: POST
Open in Framework → View in Fleet → zoom-chatbot-intent-router-to-salesforce.yml

Pulls Zoom Contact Center agent metrics, enriches with HR data from Workday, and pushes a summary to a Google Sheets dashboard.

naftiko: '0.5'
info:
  label: Contact Center Agent Performance Dashboard
  description: Pulls Zoom Contact Center agent metrics, enriches with HR data from Workday, and pushes a summary to a Google Sheets dashboard.
  tags:
  - communications
  - contact-center
  - workday
  - google-sheets
  - reporting
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-cc-reporting
    port: 8080
    tools:
    - name: generate-agent-performance-report
      description: Given a Zoom Contact Center queue ID and Google Sheet ID, pull agent metrics, enrich from Workday, and update the spreadsheet.
      inputParameters:
      - name: queue_id
        in: body
        type: string
        description: The Zoom Contact Center queue ID.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      steps:
      - name: get-agent-metrics
        type: call
        call: zoom.get-queue-agents
        with:
          queue_id: '{{queue_id}}'
      - name: get-employee-data
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{get-agent-metrics.agents[0].user_id}}'
      - name: update-sheet
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: AgentMetrics!A1
          values:
          - '{{get-employee-data.full_name}}'
          - '{{get-employee-data.department}}'
          - '{{get-agent-metrics.agents[0].calls_handled}}'
          - '{{get-agent-metrics.agents[0].avg_handle_time}}'
          - '{{get-agent-metrics.agents[0].avg_wait_time}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: queue-agents
      path: /contact_center/queues/{{queue_id}}/agents
      inputParameters:
      - name: queue_id
        in: path
      operations:
      - name: get-queue-agents
        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: 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-rows
        method: POST
Open in Framework → View in Fleet → contact-center-agent-performance-dashboard.yml

Receives Zoom webhook events for meeting started and ended, logs them to Datadog, and posts real-time notifications to a Microsoft Teams channel.

naftiko: '0.5'
info:
  label: Zoom App Marketplace Webhook Router
  description: Receives Zoom webhook events for meeting started and ended, logs them to Datadog, and posts real-time notifications to a Microsoft Teams channel.
  tags:
  - communications
  - platform-engineering
  - datadog
  - microsoft-teams
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-webhook-router
    port: 8080
    tools:
    - name: route-meeting-webhook
      description: Given a Zoom webhook event payload, log to Datadog and notify Microsoft Teams.
      inputParameters:
      - name: event_type
        in: body
        type: string
        description: The Zoom webhook event type (e.g. meeting.started, meeting.ended).
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting ID from the webhook payload.
      - name: host_email
        in: body
        type: string
        description: The meeting host email.
      - name: teams_webhook_url
        in: body
        type: string
        description: The Microsoft Teams incoming webhook URL.
      steps:
      - name: log-to-datadog
        type: call
        call: datadog.send-log
        with:
          source: zoom-webhooks
          service: zoom-integration
          message: 'Zoom event: {{event_type}} for meeting {{meeting_id}} hosted by {{host_email}}'
          tags:
          - event_type:{{event_type}}
          - meeting_id:{{meeting_id}}
      - name: notify-teams
        type: call
        call: msteams.send-webhook
        with:
          webhook_url: '{{teams_webhook_url}}'
          text: 'Zoom Meeting {{event_type}}: Meeting {{meeting_id}} by {{host_email}}'
  consumes:
  - type: http
    namespace: datadog
    baseUri: https://http-intake.logs.datadoghq.com/api/v2
    authentication:
      type: bearer
      token: $secrets.datadog_api_key
    resources:
    - name: logs
      path: /logs
      operations:
      - name: send-log
        method: POST
  - type: http
    namespace: msteams
    baseUri: '{{teams_webhook_url}}'
    authentication:
      type: none
    resources:
    - name: webhook
      path: ''
      operations:
      - name: send-webhook
        method: POST
Open in Framework → View in Fleet → zoom-app-marketplace-webhook-router.yml

Generates a Zoom account daily usage report including total meetings, participants, and meeting minutes, then emails the summary to an administrator via Microsoft Outlook.

naftiko: '0.5'
info:
  label: Zoom Account Usage Report to Email
  description: Generates a Zoom account daily usage report including total meetings, participants, and meeting minutes, then emails the summary to an administrator via Microsoft Outlook.
  tags:
  - communications
  - reporting
  - administration
  - microsoft-outlook
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-usage-report
    port: 8080
    tools:
    - name: send-usage-report
      description: Generate a Zoom usage report for a date and email it to the admin.
      inputParameters:
      - name: report_date
        in: body
        type: string
        description: The report date in YYYY-MM-DD format.
      - name: admin_email
        in: body
        type: string
        description: The administrator email.
      steps:
      - name: get-daily-report
        type: call
        call: zoom.get-daily-report
        with:
          year: '{{report_date}}'
          month: '{{report_date}}'
      - name: send-report
        type: call
        call: outlook.send-mail
        with:
          user_upn: '{{admin_email}}'
          to: '{{admin_email}}'
          subject: Zoom Daily Usage Report - {{report_date}}
          body: 'Total Meetings: {{get-daily-report.dates[0].meetings}}

            Total Participants: {{get-daily-report.dates[0].participants}}

            Total Meeting Minutes: {{get-daily-report.dates[0].meeting_minutes}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: daily-report
      path: /report/daily
      inputParameters:
      - name: year
        in: query
      - name: month
        in: query
      operations:
      - name: get-daily-report
        method: GET
  - type: http
    namespace: outlook
    baseUri: https://graph.microsoft.com/v1.0
    authentication:
      type: bearer
      token: $secrets.msgraph_token
    resources:
    - name: mail
      path: /users/{{user_upn}}/sendMail
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: send-mail
        method: POST
Open in Framework → View in Fleet → zoom-account-usage-report-to-email.yml

When a participant registers for a Zoom meeting, creates a Google Calendar event for the registrant with the meeting join URL and details, then confirms via Zoom Team Chat.

naftiko: '0.5'
info:
  label: Zoom Meeting Registrant to Google Calendar
  description: When a participant registers for a Zoom meeting, creates a Google Calendar event for the registrant with the meeting join URL and details, then confirms via Zoom Team Chat.
  tags:
  - communications
  - meetings
  - google-calendar
  - team-chat
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-gcal-registration
    port: 8080
    tools:
    - name: sync-registration-to-gcal
      description: Given a Zoom meeting ID and registrant email, create a Google Calendar event with meeting details and notify via Team Chat.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting ID.
      - name: registrant_email
        in: body
        type: string
        description: The registrant email address.
      steps:
      - name: get-meeting
        type: call
        call: zoom.get-meeting-details
        with:
          meeting_id: '{{meeting_id}}'
      - name: create-event
        type: call
        call: gcal.create-event
        with:
          calendar_id: '{{registrant_email}}'
          summary: '{{get-meeting.topic}}'
          start: '{{get-meeting.start_time}}'
          duration_minutes: '{{get-meeting.duration}}'
          description: 'Join Zoom Meeting: {{get-meeting.join_url}}

            Meeting ID: {{get-meeting.id}}

            Passcode: {{get-meeting.password}}'
      - name: confirm-chat
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{registrant_email}}'
          message: 'You are registered for ''{{get-meeting.topic}}'' on {{get-meeting.start_time}}. A calendar event has been created. Join link: {{get-meeting.join_url}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meetings
      path: /meetings/{{meeting_id}}
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-details
        method: GET
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        method: POST
  - type: http
    namespace: gcal
    baseUri: https://www.googleapis.com/calendar/v3
    authentication:
      type: bearer
      token: $secrets.google_calendar_token
    resources:
    - name: events
      path: /calendars/{{calendar_id}}/events
      inputParameters:
      - name: calendar_id
        in: path
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → zoom-meeting-registrant-to-google-calendar.yml

Orchestrates video conferencing workflow 8 by coordinating across systems, validating data, and sending notifications.

naftiko: '0.5'
info:
  label: Video Conferencing Workflow 8
  description: Orchestrates video conferencing workflow 8 by coordinating across systems, validating data, and sending notifications.
  tags:
  - video
  - operations
  - microsoft-teams
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: run-video-conferencing-workflow-008
      description: Orchestrates video conferencing 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 Video Conferencing Workflow 8 for request {{request_id}}.
  consumes:
  - type: http
    namespace: primary-api
    baseUri: https://api.zoom.com/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: primary
      path: /process
      operations:
      - name: initiate
        method: POST
  - type: http
    namespace: secondary-api
    baseUri: https://api.zoom.com/v2
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-workflow-8.yml

Retrieves video conferencing operational data for workflow 9.

naftiko: '0.5'
info:
  label: Video Conferencing Data Query 9
  description: Retrieves video conferencing operational data for workflow 9.
  tags:
  - video
  - operations
capability:
  exposes:
  - type: mcp
    namespace: video
    port: 8080
    tools:
    - name: get-data-9
      description: Query video conferencing data for workflow 9.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The entity identifier.
      call: video-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: video-api
    baseUri: https://api.zoom.com/video-conferencing/v1
    authentication:
      type: bearer
      token: $secrets.zoom_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 → video-conferencing-data-query-9.yml

Fetches the current queue status for a Zoom Contact Center queue, including agents online, calls waiting, and average wait time.

naftiko: '0.5'
info:
  label: Contact Center Queue Status
  description: Fetches the current queue status for a Zoom Contact Center queue, including agents online, calls waiting, and average wait time.
  tags:
  - communications
  - contact-center
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-contact-center
    port: 8080
    tools:
    - name: get-queue-status
      description: Retrieve real-time queue metrics for a Zoom Contact Center queue.
      inputParameters:
      - name: queue_id
        in: body
        type: string
        description: The Zoom Contact Center queue ID.
      call: zoom.get-queue-metrics
      with:
        queue_id: '{{queue_id}}'
      outputParameters:
      - name: agents_online
        type: number
        mapping: $.agents_online
      - name: calls_in_queue
        type: number
        mapping: $.calls_in_queue
      - name: avg_wait_time
        type: number
        mapping: $.avg_wait_time_seconds
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: contact-center-queues
      path: /contact_center/queues/{{queue_id}}/metrics
      inputParameters:
      - name: queue_id
        in: path
      operations:
      - name: get-queue-metrics
        method: GET
Open in Framework → View in Fleet → contact-center-queue-status.yml

Creates a Zoom meeting for a user, then adds it as a calendar event in Microsoft Outlook with the join URL and dial-in numbers.

naftiko: '0.5'
info:
  label: Meeting Scheduling via Microsoft Outlook
  description: Creates a Zoom meeting for a user, then adds it as a calendar event in Microsoft Outlook with the join URL and dial-in numbers.
  tags:
  - communications
  - meetings
  - microsoft-outlook
  - scheduling
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-outlook-scheduling
    port: 8080
    tools:
    - name: schedule-meeting-with-calendar
      description: Create a Zoom meeting and synchronize it to a Microsoft Outlook calendar event.
      inputParameters:
      - name: host_email
        in: body
        type: string
        description: The Zoom host user email.
      - name: topic
        in: body
        type: string
        description: Meeting topic.
      - name: start_time
        in: body
        type: string
        description: Start time in ISO 8601 format.
      - name: duration
        in: body
        type: number
        description: Duration in minutes.
      - name: attendees
        in: body
        type: string
        description: Comma-separated attendee emails.
      steps:
      - name: create-meeting
        type: call
        call: zoom.create-meeting
        with:
          user_id: '{{host_email}}'
          topic: '{{topic}}'
          start_time: '{{start_time}}'
          duration: '{{duration}}'
          type: 2
      - name: create-calendar-event
        type: call
        call: outlook.create-event
        with:
          user_upn: '{{host_email}}'
          subject: '{{topic}}'
          start: '{{start_time}}'
          duration_minutes: '{{duration}}'
          attendees: '{{attendees}}'
          body: 'Join Zoom Meeting: {{create-meeting.join_url}}

            Meeting ID: {{create-meeting.id}}

            Passcode: {{create-meeting.password}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meetings
      path: /users/{{user_id}}/meetings
      inputParameters:
      - name: user_id
        in: path
      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: events
      path: /users/{{user_upn}}/events
      inputParameters:
      - name: user_upn
        in: path
      operations:
      - name: create-event
        method: POST
Open in Framework → View in Fleet → meeting-scheduling-via-microsoft-outlook.yml

Retrieves statistics for a team chat channel.

naftiko: '0.5'
info:
  label: Team Chat Channel Stats
  description: Retrieves statistics for a team chat channel.
  tags:
  - collaboration
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: collaboration
    port: 8080
    tools:
    - name: get-team
      description: Retrieves statistics for a team chat channel.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The team chat channel stats identifier.
      call: collaboration-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: collaboration-api
    baseUri: https://api.zoom.com/collaboration/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: team
      path: /team/chat/channel/stats/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-team
        method: GET
Open in Framework → View in Fleet → team-chat-channel-stats.yml

Lists all recurring Zoom meetings for a user, pulls participant reports for each occurrence, and writes utilization data to a Google Sheet for capacity planning.

naftiko: '0.5'
info:
  label: Recurring Meeting Utilization Audit
  description: Lists all recurring Zoom meetings for a user, pulls participant reports for each occurrence, and writes utilization data to a Google Sheet for capacity planning.
  tags:
  - communications
  - meetings
  - reporting
  - google-sheets
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-meeting-audit
    port: 8080
    tools:
    - name: audit-recurring-meetings
      description: Given a Zoom user and Google Sheet ID, analyze recurring meeting utilization and write results to the spreadsheet.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Zoom user ID or email.
      - name: spreadsheet_id
        in: body
        type: string
        description: The Google Sheets spreadsheet ID.
      steps:
      - name: list-meetings
        type: call
        call: zoom.list-user-meetings
        with:
          user_id: '{{user_id}}'
          type: scheduled
      - name: get-report
        type: call
        call: zoom.get-meeting-report
        with:
          meeting_id: '{{list-meetings.meetings[0].id}}'
      - name: write-sheet
        type: call
        call: gsheets.append-rows
        with:
          spreadsheet_id: '{{spreadsheet_id}}'
          range: MeetingAudit!A1
          values:
          - '{{list-meetings.meetings[0].topic}}'
          - '{{list-meetings.meetings[0].start_time}}'
          - '{{get-report.total_records}}'
          - '{{list-meetings.meetings[0].duration}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: user-meetings
      path: /users/{{user_id}}/meetings
      inputParameters:
      - name: user_id
        in: path
      - name: type
        in: query
      operations:
      - name: list-user-meetings
        method: GET
    - name: meeting-report
      path: /report/meetings/{{meeting_id}}/participants
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-report
        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}}:append
      inputParameters:
      - name: spreadsheet_id
        in: path
      - name: range
        in: path
      operations:
      - name: append-rows
        method: POST
Open in Framework → View in Fleet → recurring-meeting-utilization-audit.yml

Retrieves the Zoom AI Companion meeting summary for a completed meeting, including key topics, action items, and next steps.

naftiko: '0.5'
info:
  label: AI Companion Meeting Summary
  description: Retrieves the Zoom AI Companion meeting summary for a completed meeting, including key topics, action items, and next steps.
  tags:
  - communications
  - meetings
  - ai-companion
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-ai
    port: 8080
    tools:
    - name: get-meeting-summary
      description: Fetch the AI Companion-generated summary for a completed Zoom meeting.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      call: zoom.get-ai-summary
      with:
        meeting_id: '{{meeting_id}}'
      outputParameters:
      - name: summary_text
        type: string
        mapping: $.meeting_summary.summary_details.summary_overview
      - name: action_items
        type: array
        mapping: $.meeting_summary.summary_details.next_steps
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meeting-summaries
      path: /meetings/{{meeting_id}}/meeting_summary
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-ai-summary
        method: GET
Open in Framework → View in Fleet → ai-companion-meeting-summary.yml

Looks up the total number of registrants for a Zoom webinar by webinar ID. Used by marketing teams to track registration performance.

naftiko: '0.5'
info:
  label: Webinar Registrant Count
  description: Looks up the total number of registrants for a Zoom webinar by webinar ID. Used by marketing teams to track registration performance.
  tags:
  - communications
  - webinars
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-webinars
    port: 8080
    tools:
    - name: get-webinar-registrant-count
      description: Return the total registrant count for a Zoom webinar.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      call: zoom.list-webinar-registrants
      with:
        webinar_id: '{{webinar_id}}'
      outputParameters:
      - name: total_records
        type: number
        mapping: $.total_records
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: webinar-registrants
      path: /webinars/{{webinar_id}}/registrants
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: list-webinar-registrants
        method: GET
Open in Framework → View in Fleet → webinar-registrant-count.yml

When an employee is terminated in Workday, deactivates their Zoom account, removes them from all Zoom Team Chat channels, and logs the action in ServiceNow.

naftiko: '0.5'
info:
  label: Zoom SSO User Deprovisioning
  description: When an employee is terminated in Workday, deactivates their Zoom account, removes them from all Zoom Team Chat channels, and logs the action in ServiceNow.
  tags:
  - communications
  - administration
  - workday
  - servicenow
  - security
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-user-offboarding
    port: 8080
    tools:
    - name: deprovision-zoom-user
      description: Given a Workday employee ID, deactivate their Zoom account, remove from channels, and log to ServiceNow.
      inputParameters:
      - name: workday_employee_id
        in: body
        type: string
        description: The Workday worker ID for the terminated employee.
      steps:
      - name: get-employee
        type: call
        call: workday.get-worker
        with:
          worker_id: '{{workday_employee_id}}'
      - name: deactivate-zoom
        type: call
        call: zoom.update-user-status
        with:
          user_id: '{{get-employee.work_email}}'
          action: deactivate
      - name: log-offboarding
        type: call
        call: servicenow.create-incident
        with:
          short_description: 'Zoom account deactivated: {{get-employee.full_name}}'
          category: it_offboarding
          description: 'Zoom account for {{get-employee.work_email}} deactivated following Workday termination. Employee ID: {{workday_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: /workers/{{worker_id}}
      inputParameters:
      - name: worker_id
        in: path
      operations:
      - name: get-worker
        method: GET
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: user-status
      path: /users/{{user_id}}/status
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: update-user-status
        method: PUT
  - type: http
    namespace: servicenow
    baseUri: https://your-instance.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 → zoom-sso-user-deprovisioning.yml

After a Zoom webinar ends, retrieves the attendee list, updates each contact's engagement in HubSpot, and sends a follow-up email via HubSpot transactional email.

naftiko: '0.5'
info:
  label: Webinar Attendance Report to HubSpot
  description: After a Zoom webinar ends, retrieves the attendee list, updates each contact's engagement in HubSpot, and sends a follow-up email via HubSpot transactional email.
  tags:
  - communications
  - webinars
  - hubspot
  - marketing
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-webinar-marketing
    port: 8080
    tools:
    - name: sync-webinar-attendance
      description: Given a Zoom webinar ID and HubSpot list ID, fetch attendees, update HubSpot contacts, and trigger follow-up emails.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      - name: hubspot_list_id
        in: body
        type: string
        description: The HubSpot contact list ID for attendees.
      steps:
      - name: get-attendees
        type: call
        call: zoom.list-webinar-attendees
        with:
          webinar_id: '{{webinar_id}}'
      - name: get-webinar-details
        type: call
        call: zoom.get-webinar-info
        with:
          webinar_id: '{{webinar_id}}'
      - name: update-hubspot
        type: call
        call: hubspot.update-contact
        with:
          email: '{{get-attendees.participants[0].user_email}}'
          properties:
            last_webinar_attended: '{{get-webinar-details.topic}}'
            webinar_attendance_date: '{{get-webinar-details.start_time}}'
      - name: send-followup
        type: call
        call: hubspot.send-transactional-email
        with:
          email_id: webinar_followup_template
          to: '{{get-attendees.participants[0].user_email}}'
          custom_properties:
            webinar_name: '{{get-webinar-details.topic}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: webinar-attendees
      path: /report/webinars/{{webinar_id}}/participants
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: list-webinar-attendees
        method: GET
    - name: webinars
      path: /webinars/{{webinar_id}}
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar-info
        method: GET
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts
      operations:
      - name: update-contact
        method: PATCH
    - name: transactional-email
      path: /marketing/v3/transactional/single-email/send
      operations:
      - name: send-transactional-email
        method: POST
Open in Framework → View in Fleet → webinar-attendance-report-to-hubspot.yml

Monitors Zoom Contact Center queue wait times. When average wait time exceeds the SLA threshold, creates a PagerDuty incident, sends a Slack alert, and logs the breach to ServiceNow.

naftiko: '0.5'
info:
  label: Contact Center SLA Breach Escalation
  description: Monitors Zoom Contact Center queue wait times. When average wait time exceeds the SLA threshold, creates a PagerDuty incident, sends a Slack alert, and logs the breach to ServiceNow.
  tags:
  - communications
  - contact-center
  - pagerduty
  - slack
  - servicenow
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-cc-sla
    port: 8080
    tools:
    - name: escalate-sla-breach
      description: Given a Zoom Contact Center queue ID and SLA threshold, check wait times and escalate if breached.
      inputParameters:
      - name: queue_id
        in: body
        type: string
        description: The Zoom Contact Center queue ID.
      - name: sla_threshold_seconds
        in: body
        type: number
        description: SLA threshold in seconds.
      - name: slack_channel
        in: body
        type: string
        description: Slack channel for alerts.
      steps:
      - name: get-queue-metrics
        type: call
        call: zoom.get-queue-status
        with:
          queue_id: '{{queue_id}}'
      - name: create-pagerduty
        type: call
        call: pagerduty.create-incident
        with:
          service_id: ZOOM_CC_SVC
          title: 'SLA Breach: Queue {{queue_id}} avg wait {{get-queue-metrics.avg_wait_time_seconds}}s'
          body: 'Queue: {{queue_id}}

            Avg Wait: {{get-queue-metrics.avg_wait_time_seconds}}s

            Threshold: {{sla_threshold_seconds}}s

            Calls Waiting: {{get-queue-metrics.calls_in_queue}}

            Agents Online: {{get-queue-metrics.agents_online}}'
      - name: alert-slack
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'SLA BREACH: Zoom Contact Center queue {{queue_id}} - avg wait time {{get-queue-metrics.avg_wait_time_seconds}}s exceeds {{sla_threshold_seconds}}s threshold. {{get-queue-metrics.calls_in_queue}} calls waiting.'
      - name: log-servicenow
        type: call
        call: servicenow.create-incident
        with:
          short_description: Contact Center SLA breach - Queue {{queue_id}}
          category: contact_center
          priority: '2'
          description: Average wait time {{get-queue-metrics.avg_wait_time_seconds}}s exceeded SLA of {{sla_threshold_seconds}}s.
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: queue-metrics
      path: /contact_center/queues/{{queue_id}}/metrics
      inputParameters:
      - name: queue_id
        in: path
      operations:
      - name: get-queue-status
        method: GET
  - 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
  - type: http
    namespace: servicenow
    baseUri: https://your-instance.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 → contact-center-sla-breach-escalation.yml

Exports a Zoom Whiteboard as an image, uploads it to a Confluence page, and notifies the board owner in Zoom Team Chat.

naftiko: '0.5'
info:
  label: Zoom Whiteboard Export to Confluence
  description: Exports a Zoom Whiteboard as an image, uploads it to a Confluence page, and notifies the board owner in Zoom Team Chat.
  tags:
  - communications
  - whiteboards
  - confluence
  - team-chat
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-whiteboard-export
    port: 8080
    tools:
    - name: export-whiteboard-to-confluence
      description: Given a Zoom Whiteboard ID and Confluence space, export the board and attach it to a Confluence page.
      inputParameters:
      - name: whiteboard_id
        in: body
        type: string
        description: The Zoom Whiteboard ID.
      - name: confluence_page_id
        in: body
        type: string
        description: The Confluence page ID to attach the export.
      steps:
      - name: get-whiteboard
        type: call
        call: zoom.get-whiteboard
        with:
          whiteboard_id: '{{whiteboard_id}}'
      - name: attach-to-confluence
        type: call
        call: confluence.create-attachment
        with:
          page_id: '{{confluence_page_id}}'
          file_name: whiteboard_{{whiteboard_id}}.png
          content_url: '{{get-whiteboard.export_url}}'
      - name: notify-owner
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{get-whiteboard.owner_email}}'
          message: 'Your whiteboard ''{{get-whiteboard.name}}'' has been exported to Confluence: {{attach-to-confluence.page_url}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: whiteboards
      path: /whiteboards/{{whiteboard_id}}
      inputParameters:
      - name: whiteboard_id
        in: path
      operations:
      - name: get-whiteboard
        method: GET
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        method: POST
  - type: http
    namespace: confluence
    baseUri: https://your-domain.atlassian.net/wiki/rest/api
    authentication:
      type: basic
      username: $secrets.confluence_user
      password: $secrets.confluence_api_token
    resources:
    - name: attachments
      path: /content/{{page_id}}/child/attachment
      inputParameters:
      - name: page_id
        in: path
      operations:
      - name: create-attachment
        method: POST
Open in Framework → View in Fleet → zoom-whiteboard-export-to-confluence.yml

Retrieves engagement metrics for a webinar.

naftiko: '0.5'
info:
  label: Webinar Engagement Metrics
  description: Retrieves engagement metrics for a webinar.
  tags:
  - webinars
  - analytics
capability:
  exposes:
  - type: mcp
    namespace: webinars
    port: 8080
    tools:
    - name: get-webinar
      description: Retrieves engagement metrics for a webinar.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The webinar engagement metrics identifier.
      call: webinars-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: webinars-api
    baseUri: https://api.zoom.com/webinars/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: webinar
      path: /webinar/engagement/metrics/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-webinar
        method: GET
Open in Framework → View in Fleet → webinar-engagement-metrics.yml

Retrieves call queue status for the phone system.

naftiko: '0.5'
info:
  label: Phone System Call Queue
  description: Retrieves call queue status for the phone system.
  tags:
  - phone
  - operations
capability:
  exposes:
  - type: mcp
    namespace: phone
    port: 8080
    tools:
    - name: get-phone
      description: Retrieves call queue status for the phone system.
      inputParameters:
      - name: entity_id
        in: body
        type: string
        description: The phone system call queue identifier.
      call: phone-api.get-data
      with:
        entity_id: '{{entity_id}}'
  consumes:
  - type: http
    namespace: phone-api
    baseUri: https://api.zoom.com/phone/v1
    authentication:
      type: bearer
      token: $secrets.zoom_api_token
    resources:
    - name: phone
      path: /phone/system/call/queue/{{entity_id}}
      inputParameters:
      - name: entity_id
        in: path
      operations:
      - name: get-phone
        method: GET
Open in Framework → View in Fleet → phone-system-call-queue.yml

Retrieves full details for a Zoom meeting by meeting ID, including topic, start time, duration, host, and join URL. Used by scheduling and operations teams to verify meeting configuration.

naftiko: '0.5'
info:
  label: Meeting Details Lookup
  description: Retrieves full details for a Zoom meeting by meeting ID, including topic, start time, duration, host, and join URL. Used by scheduling and operations teams to verify meeting configuration.
  tags:
  - communications
  - meetings
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-meetings
    port: 8080
    tools:
    - name: get-meeting-details
      description: Look up a Zoom meeting by ID and return its topic, host, start time, duration, timezone, and join URL.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting ID.
      call: zoom.get-meeting
      with:
        meeting_id: '{{meeting_id}}'
      outputParameters:
      - name: topic
        type: string
        mapping: $.topic
      - name: host_email
        type: string
        mapping: $.host_email
      - name: start_time
        type: string
        mapping: $.start_time
      - name: duration
        type: number
        mapping: $.duration
      - name: join_url
        type: string
        mapping: $.join_url
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: meetings
      path: /meetings/{{meeting_id}}
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting
        method: GET
Open in Framework → View in Fleet → meeting-details-lookup.yml

After a Zoom webinar, identifies registrants who did not attend, sends them the recording link via Zoom Team Chat, and updates their engagement status in HubSpot.

naftiko: '0.5'
info:
  label: Webinar Absentee Re-Engagement
  description: After a Zoom webinar, identifies registrants who did not attend, sends them the recording link via Zoom Team Chat, and updates their engagement status in HubSpot.
  tags:
  - communications
  - webinars
  - team-chat
  - hubspot
  - marketing
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-webinar-reengagement
    port: 8080
    tools:
    - name: reengage-webinar-absentees
      description: Given a Zoom webinar ID, identify no-shows, send them the recording, and update HubSpot.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      steps:
      - name: get-registrants
        type: call
        call: zoom.list-registrants
        with:
          webinar_id: '{{webinar_id}}'
          status: approved
      - name: get-absentees
        type: call
        call: zoom.list-absentees
        with:
          webinar_id: '{{webinar_id}}'
      - name: get-recording
        type: call
        call: zoom.get-webinar-recordings
        with:
          webinar_id: '{{webinar_id}}'
      - name: send-recording-link
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{get-absentees.registrants[0].email}}'
          message: 'We missed you at our webinar! Watch the recording here: {{get-recording.share_url}}'
      - name: update-hubspot
        type: call
        call: hubspot.update-contact
        with:
          email: '{{get-absentees.registrants[0].email}}'
          properties:
            webinar_status: no_show
            webinar_recording_sent: 'true'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: registrants
      path: /webinars/{{webinar_id}}/registrants
      inputParameters:
      - name: webinar_id
        in: path
      - name: status
        in: query
      operations:
      - name: list-registrants
        method: GET
    - name: absentees
      path: /past_webinars/{{webinar_id}}/absentees
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: list-absentees
        method: GET
    - name: webinar-recordings
      path: /meetings/{{webinar_id}}/recordings
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar-recordings
        method: GET
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        method: POST
  - type: http
    namespace: hubspot
    baseUri: https://api.hubapi.com
    authentication:
      type: bearer
      token: $secrets.hubspot_token
    resources:
    - name: contacts
      path: /crm/v3/objects/contacts
      operations:
      - name: update-contact
        method: PATCH
Open in Framework → View in Fleet → webinar-absentee-re-engagement.yml

Retrieves Zoom Phone settings for a specific user, including calling plan, extension number, and voicemail status.

naftiko: '0.5'
info:
  label: User Phone Settings
  description: Retrieves Zoom Phone settings for a specific user, including calling plan, extension number, and voicemail status.
  tags:
  - communications
  - zoom-phone
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-phone
    port: 8080
    tools:
    - name: get-user-phone-settings
      description: Look up Zoom Phone configuration for a user by user ID.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Zoom user ID or email.
      call: zoom.get-phone-settings
      with:
        user_id: '{{user_id}}'
      outputParameters:
      - name: extension_number
        type: string
        mapping: $.extension.extension_number
      - name: calling_plan
        type: string
        mapping: $.calling_plans[0].name
      - name: voicemail_enabled
        type: boolean
        mapping: $.voicemail.status
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: phone-user
      path: /phone/users/{{user_id}}/settings
      inputParameters:
      - name: user_id
        in: path
      operations:
      - name: get-phone-settings
        method: GET
Open in Framework → View in Fleet → user-phone-settings.yml

When a Zoom Contact Center engagement concludes, retrieves the engagement details, creates a ServiceNow incident with the interaction summary, and sends a follow-up message to the customer via Zoom Team Chat.

naftiko: '0.5'
info:
  label: Contact Center Engagement to ServiceNow Ticket
  description: When a Zoom Contact Center engagement concludes, retrieves the engagement details, creates a ServiceNow incident with the interaction summary, and sends a follow-up message to the customer via Zoom Team Chat.
  tags:
  - communications
  - contact-center
  - servicenow
  - team-chat
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-contact-center-ops
    port: 8080
    tools:
    - name: create-ticket-from-engagement
      description: Given a Zoom Contact Center engagement ID, create a ServiceNow incident and notify the customer.
      inputParameters:
      - name: engagement_id
        in: body
        type: string
        description: The Zoom Contact Center engagement ID.
      - name: customer_email
        in: body
        type: string
        description: The customer email for follow-up notification.
      steps:
      - name: get-engagement
        type: call
        call: zoom.get-engagement
        with:
          engagement_id: '{{engagement_id}}'
      - name: create-incident
        type: call
        call: servicenow.create-incident
        with:
          short_description: Contact Center Engagement {{engagement_id}}
          category: customer_support
          description: 'Channel: {{get-engagement.channel}}

            Agent: {{get-engagement.agent_name}}

            Duration: {{get-engagement.duration}}

            Disposition: {{get-engagement.disposition}}'
      - name: notify-customer
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{customer_email}}'
          message: Thank you for contacting support. Your ticket number is {{create-incident.number}}. We will follow up shortly.
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: engagements
      path: /contact_center/engagements/{{engagement_id}}
      inputParameters:
      - name: engagement_id
        in: path
      operations:
      - name: get-engagement
        method: GET
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        method: POST
  - type: http
    namespace: servicenow
    baseUri: https://your-instance.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 → contact-center-engagement-to-servicenow-ticket.yml

Checks Zoom Room health status. If a room reports issues, creates a PagerDuty incident and alerts the facilities team in a Slack channel.

naftiko: '0.5'
info:
  label: Zoom Room Health Monitor to PagerDuty
  description: Checks Zoom Room health status. If a room reports issues, creates a PagerDuty incident and alerts the facilities team in a Slack channel.
  tags:
  - communications
  - zoom-rooms
  - pagerduty
  - slack
  - monitoring
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-room-monitoring
    port: 8080
    tools:
    - name: monitor-room-health
      description: Given a Zoom Room ID, check its health and escalate to PagerDuty and Slack if degraded.
      inputParameters:
      - name: room_id
        in: body
        type: string
        description: The Zoom Room ID.
      - name: slack_channel
        in: body
        type: string
        description: The Slack channel for facility alerts.
      steps:
      - name: check-room
        type: call
        call: zoom.get-room-health
        with:
          room_id: '{{room_id}}'
      - name: create-pagerduty-incident
        type: call
        call: pagerduty.create-incident
        with:
          service_id: ZOOM_ROOMS_SVC
          title: 'Zoom Room Degraded: {{check-room.room_name}}'
          body: 'Room {{check-room.room_name}} status: {{check-room.health}}. Issues: {{check-room.issues}}'
      - name: alert-facilities
        type: call
        call: slack.post-message
        with:
          channel: '{{slack_channel}}'
          text: 'Zoom Room Alert: {{check-room.room_name}} is reporting {{check-room.health}} status. PagerDuty incident created: {{create-pagerduty-incident.incident_key}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: rooms
      path: /rooms/{{room_id}}
      inputParameters:
      - name: room_id
        in: path
      operations:
      - name: get-room-health
        method: GET
  - 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 → zoom-room-health-monitor-to-pagerduty.yml

When a new registrant signs up for a Zoom webinar, creates or updates a lead in Salesforce and sends a confirmation message to the registrant via Zoom Team Chat.

naftiko: '0.5'
info:
  label: Webinar Registration to CRM Sync
  description: When a new registrant signs up for a Zoom webinar, creates or updates a lead in Salesforce and sends a confirmation message to the registrant via Zoom Team Chat.
  tags:
  - communications
  - webinars
  - salesforce
  - team-chat
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-webinar-crm
    port: 8080
    tools:
    - name: sync-registrant-to-crm
      description: Given a Zoom webinar registrant email and webinar ID, upsert the lead in Salesforce and send a Team Chat confirmation.
      inputParameters:
      - name: webinar_id
        in: body
        type: string
        description: The Zoom webinar ID.
      - name: registrant_email
        in: body
        type: string
        description: The registrant email address.
      - name: registrant_name
        in: body
        type: string
        description: The registrant full name.
      steps:
      - name: get-webinar
        type: call
        call: zoom.get-webinar
        with:
          webinar_id: '{{webinar_id}}'
      - name: upsert-lead
        type: call
        call: salesforce.upsert-lead
        with:
          email: '{{registrant_email}}'
          first_name: '{{registrant_name}}'
          lead_source: Zoom Webinar
          description: 'Registered for webinar: {{get-webinar.topic}}'
      - name: notify-registrant
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{registrant_email}}'
          message: Thanks for registering for {{get-webinar.topic}} on {{get-webinar.start_time}}. Your Zoom join link will be emailed shortly.
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: webinars
      path: /webinars/{{webinar_id}}
      inputParameters:
      - name: webinar_id
        in: path
      operations:
      - name: get-webinar
        method: GET
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        method: POST
  - type: http
    namespace: salesforce
    baseUri: https://your-instance.salesforce.com/services/data/v59.0
    authentication:
      type: bearer
      token: $secrets.salesforce_token
    resources:
    - name: leads
      path: /sobjects/Lead
      operations:
      - name: upsert-lead
        method: POST
Open in Framework → View in Fleet → webinar-registration-to-crm-sync.yml

When a user registers for a Zoom Events session, creates or updates a lead in Marketo and adds them to a nurture campaign for post-event follow-up.

naftiko: '0.5'
info:
  label: Zoom Events Registration to Marketo
  description: When a user registers for a Zoom Events session, creates or updates a lead in Marketo and adds them to a nurture campaign for post-event follow-up.
  tags:
  - communications
  - webinars
  - marketo
  - marketing
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-events-marketo
    port: 8080
    tools:
    - name: sync-event-registration
      description: Given a Zoom Events session ID and registrant details, upsert a Marketo lead and add to a campaign.
      inputParameters:
      - name: session_id
        in: body
        type: string
        description: The Zoom Events session ID.
      - name: registrant_email
        in: body
        type: string
        description: The registrant email.
      - name: registrant_name
        in: body
        type: string
        description: The registrant name.
      - name: marketo_campaign_id
        in: body
        type: string
        description: The Marketo campaign ID for nurture.
      steps:
      - name: get-session
        type: call
        call: zoom.get-event-session
        with:
          session_id: '{{session_id}}'
      - name: upsert-lead
        type: call
        call: marketo.upsert-lead
        with:
          email: '{{registrant_email}}'
          firstName: '{{registrant_name}}'
          leadSource: Zoom Events
          zoomEventName: '{{get-session.topic}}'
      - name: add-to-campaign
        type: call
        call: marketo.add-to-campaign
        with:
          campaign_id: '{{marketo_campaign_id}}'
          lead_email: '{{registrant_email}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: event-sessions
      path: /events/sessions/{{session_id}}
      inputParameters:
      - name: session_id
        in: path
      operations:
      - name: get-event-session
        method: GET
  - type: http
    namespace: marketo
    baseUri: https://your-instance.mktorest.com/rest/v1
    authentication:
      type: bearer
      token: $secrets.marketo_token
    resources:
    - name: leads
      path: /leads.json
      operations:
      - name: upsert-lead
        method: POST
    - name: campaigns
      path: /campaigns/{{campaign_id}}/trigger.json
      inputParameters:
      - name: campaign_id
        in: path
      operations:
      - name: add-to-campaign
        method: POST
Open in Framework → View in Fleet → zoom-events-registration-to-marketo.yml

Sends a text message to a Zoom Team Chat channel on behalf of a user or chatbot.

naftiko: '0.5'
info:
  label: Chat Channel Message Sender
  description: Sends a text message to a Zoom Team Chat channel on behalf of a user or chatbot.
  tags:
  - communications
  - team-chat
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-chat
    port: 8080
    tools:
    - name: send-channel-message
      description: Post a text message to a Zoom Team Chat channel.
      inputParameters:
      - name: channel_id
        in: body
        type: string
        description: The Zoom Team Chat channel ID.
      - name: message
        in: body
        type: string
        description: The message text to send.
      call: zoom.post-channel-message
      with:
        to_channel: '{{channel_id}}'
        message: '{{message}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-channel-message
        method: POST
Open in Framework → View in Fleet → chat-channel-message-sender.yml

Fetches cloud recording files for a given Zoom user within a date range. Returns recording topic, file type, size, and download URL for compliance and content review.

naftiko: '0.5'
info:
  label: List User Recordings
  description: Fetches cloud recording files for a given Zoom user within a date range. Returns recording topic, file type, size, and download URL for compliance and content review.
  tags:
  - communications
  - recordings
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-recordings
    port: 8080
    tools:
    - name: list-user-recordings
      description: Retrieve all cloud recordings for a Zoom user between two dates.
      inputParameters:
      - name: user_id
        in: body
        type: string
        description: The Zoom user ID or email.
      - name: from_date
        in: body
        type: string
        description: Start date in YYYY-MM-DD format.
      - name: to_date
        in: body
        type: string
        description: End date in YYYY-MM-DD format.
      call: zoom.get-recordings
      with:
        user_id: '{{user_id}}'
        from: '{{from_date}}'
        to: '{{to_date}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: recordings
      path: /users/{{user_id}}/recordings
      inputParameters:
      - name: user_id
        in: path
      - name: from
        in: query
      - name: to
        in: query
      operations:
      - name: get-recordings
        method: GET
Open in Framework → View in Fleet → list-user-recordings.yml

After a Zoom meeting recording completes, downloads the recording metadata and uploads a reference document to Google Drive with a link, then notifies the host in Zoom Team Chat.

naftiko: '0.5'
info:
  label: Meeting Recording to Google Drive Archiver
  description: After a Zoom meeting recording completes, downloads the recording metadata and uploads a reference document to Google Drive with a link, then notifies the host in Zoom Team Chat.
  tags:
  - communications
  - recordings
  - google-drive
  - team-chat
  - zoom
capability:
  exposes:
  - type: mcp
    namespace: zoom-recording-archive
    port: 8080
    tools:
    - name: archive-recording-to-drive
      description: Given a Zoom meeting UUID and Google Drive folder ID, fetch recording metadata, create a reference doc in Drive, and notify the meeting host via Team Chat.
      inputParameters:
      - name: meeting_id
        in: body
        type: string
        description: The Zoom meeting UUID.
      - name: drive_folder_id
        in: body
        type: string
        description: The Google Drive folder ID for archiving.
      steps:
      - name: get-recordings
        type: call
        call: zoom.get-meeting-recordings
        with:
          meeting_id: '{{meeting_id}}'
      - name: upload-doc
        type: call
        call: gdrive.create-file
        with:
          folder_id: '{{drive_folder_id}}'
          name: Zoom Recording - {{get-recordings.topic}} - {{get-recordings.start_time}}
          content: 'Recording download: {{get-recordings.recording_files[0].download_url}}

            Duration: {{get-recordings.duration}} minutes

            Host: {{get-recordings.host_email}}'
      - name: notify-host
        type: call
        call: zoom.post-chat-message
        with:
          to_contact: '{{get-recordings.host_email}}'
          message: 'Your Zoom recording for ''{{get-recordings.topic}}'' has been archived to Google Drive: {{upload-doc.webViewLink}}'
  consumes:
  - type: http
    namespace: zoom
    baseUri: https://api.zoom.us/v2
    authentication:
      type: bearer
      token: $secrets.zoom_oauth_token
    resources:
    - name: recordings
      path: /meetings/{{meeting_id}}/recordings
      inputParameters:
      - name: meeting_id
        in: path
      operations:
      - name: get-meeting-recordings
        method: GET
    - name: chat-messages
      path: /chat/users/me/messages
      operations:
      - name: post-chat-message
        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
      inputParameters:
      - name: uploadType
        in: query
        value: multipart
      operations:
      - name: create-file
        method: POST
Open in Framework → View in Fleet → meeting-recording-to-google-drive-archiver.yml

Areas — Total: 2545

  • .NET
  • 3D
  • A/B Testing
  • AI Agents
  • AI Applications
  • AI Architectures
  • AI Assistants
  • AI Ethics
  • AI Governance
  • AI Infrastructure
  • AI Operations
  • AI Ops
  • AI Platforms
  • AI Safety
  • AI Securities
  • AI Solutions
  • AI Technologies
  • AI Testing
  • AI Tools
  • AI Trainings
  • AJAX
  • API Development
  • API Gateways
  • API Integrations
  • API Management
  • API Securities
  • API Testing
  • Acceptance Testing
  • Access Control Management
  • Access Controls
  • Access Management
  • Access Management Solutions
  • Accessibility
  • Accessibility Audits
  • Account Management
  • Accountability
  • Accounting
  • Accounting Software
  • Accounting Systems
  • Accounting Tools
  • Accounts Payables
  • Accounts Receivables
  • Active Directory
  • Activity Tracking
  • Actuarial Sciences
  • Ad Management
  • Ad Platforms
  • Ad-teches
  • Administration
  • Administratives
  • Advertising
  • Advertising Platforms
  • Advertising Technologies
  • Agent Development
  • Agent Frameworks
  • Agent-Based Frameworks
  • Agent-based Systems
  • Agentic AI
  • Agentic Frameworks
  • Agentic Solutions
  • Agentic Systems
  • Agentics
  • Agents
  • Alarm Systems
  • Alerting
  • Alerts
  • Algorithm Design
  • Algorithm Development
  • Algorithm Implementations
  • Algorithms
  • Ambassadors
  • Analysis
  • Analytics
  • Analytics Infrastructure
  • Androids
  • Animations
  • Annotations
  • Anomaly Detections
  • Antivirus
  • Apache Portable Runtimes
  • Apple iOS
  • Applicant Tracking Systems
  • Application Architectures
  • Application Deliveries
  • Application Development
  • Application Integrations
  • Application Lifecycle Management
  • Application Management
  • Application Monitoring
  • Application Performance Management
  • Application Performance Monitoring
  • Application Platforms
  • Application Profilings
  • Application Programming Interfaces
  • Application Securities
  • Application Servers
  • Applications
  • Architecture Design
  • Architecture Governance
  • Architecture Informatiques
  • Architecture Strategies
  • Architectures
  • Archives
  • Archiving
  • Arrays
  • Artifact Management
  • Artificial Intelligence
  • Artificial Intelligence/Machine Learning
  • Assessment Tools
  • Assessments
  • Asset Inventories
  • Asset Management
  • Asset Managers
  • Asset Protection
  • Asset Tracking
  • Assignments
  • Asynchronous
  • Asynchronous Communications
  • Asynchronous Processing
  • Audience Engagements
  • Audience Segmentations
  • Audience Targetings
  • Audio
  • Audit Management
  • Audit Processes
  • Audit Reports
  • Audit Systems
  • Audit Trails
  • Audits
  • Australias
  • Authentications
  • Authoring Tools
  • Authorizations
  • Automated Testing
  • Automated Testing Frameworks
  • Automation
  • Automation Platforms
  • Automation Testing
  • Automation Toolings
  • Automls
  • Automotive
  • Autonomous Agents
  • Autonomous Systems
  • Autoscalings
  • Awareness
  • B2B Data
  • B2B Marketing
  • BI
  • BPM
  • Backend Development
  • Backend Engineering
  • Backends
  • Background Checks
  • Background Jobs
  • Backup And Recovery
  • Backups
  • Backward Compatibilities
  • Bandwidth Management
  • Banking
  • Banking Infrastructure
  • Banking Platforms
  • Banking Systems
  • Bashes
  • Batch Processing
  • Battery Technologies
  • Behavioral Analysis
  • Belts
  • Benchmarkings
  • Benchmarks
  • Benefits Administration
  • Best Practices
  • Big Data
  • Billing Management
  • Billings
  • Blockchains
  • Bloggings
  • Bookings
  • Bookkeepings
  • Bots
  • Bridges
  • Broadcast Technologies
  • Broadcastings
  • Browser Compatibilities
  • Browser Extensions
  • Browser Technologies
  • Browser Testing
  • Browser-Based
  • Browsers
  • Budgetings
  • Bug Tracking
  • Build Automation
  • Build Pipelines
  • Build Securities
  • Build Systems
  • Build Tools
  • Build Verifications
  • Building Automation
  • Building Securities
  • Business
  • Business Alignments
  • Business Analysis
  • Business Analytics
  • Business Applications
  • Business Continuities
  • Business Excellence
  • Business Insurances
  • Business Intelligence
  • Business Logics
  • Business Management
  • Business Modeling
  • 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
  • CI
  • CI/CD Pipelines
  • Caches
  • Caching
  • Calendars
  • Cameras
  • Campaign Management
  • Capacity Management
  • Capital Markets
  • Career Development
  • Case Management
  • Cash Flow Management
  • Cash Management
  • Cash Reconciliations
  • Catalogs
  • Causal Reasonings
  • Centralized Repositories
  • Certificate Authorities
  • Certificates
  • Certifications
  • Change Data Captures
  • Change Management
  • Chaos Engineering
  • Charting
  • Charts
  • Chatbot Platforms
  • Chatbots
  • Chats
  • Chemical Engineering
  • Chromiums
  • Cities
  • Classification
  • Clean Energies
  • Clearings
  • Client Communications
  • Client Data
  • Client Experiences
  • Client Libraries
  • Client Management
  • Client Relations
  • Client Relationship Management
  • Client Services
  • Client Solutions
  • Client Updates
  • Client-servers
  • Clients
  • Climate Changes
  • Climates
  • Cloud Access
  • Cloud Access Governance
  • Cloud Adoptions
  • Cloud Application Development
  • Cloud Architectures
  • Cloud Assets
  • Cloud Computes
  • Cloud Computing
  • Cloud Computing Environments
  • Cloud Computing Infrastructure
  • Cloud Computing Platforms
  • Cloud Computing Services
  • Cloud Computing Services And Infrastructure
  • Cloud Connectivity
  • Cloud Controls
  • Cloud Data
  • Cloud Data Management
  • Cloud Data Platforms
  • Cloud Data Warehouses
  • Cloud Database Technologies
  • Cloud Databases
  • Cloud Deployments
  • Cloud Development
  • Cloud Ecosystems
  • Cloud Enablement
  • Cloud Engineering
  • Cloud Environments
  • Cloud Gamings
  • Cloud Governance
  • Cloud Implementations
  • Cloud Infrastructure
  • Cloud Integrations
  • Cloud Journeys
  • Cloud Management
  • Cloud Migrations
  • Cloud Native Application Bundles
  • Cloud Natives
  • Cloud Network Securities
  • Cloud Networking
  • Cloud Operations
  • Cloud Platforms
  • Cloud Runs
  • Cloud Securities
  • Cloud Security Best Practices
  • Cloud Security Controls
  • Cloud Security Frameworks
  • Cloud Security Posture Management
  • Cloud Security Posture Management (CSPM)
  • Cloud Security Tools
  • Cloud Service Providers
  • Cloud Services
  • Cloud Software
  • Cloud Solutions
  • Cloud Spanners
  • Cloud Storage
  • Cloud Strategies
  • Cloud Systems
  • Cloud Technologies
  • Cloud Technologies And Services
  • Cloud Telephonies
  • Cloud Transformations
  • Cloud Workload Protection Platforms
  • Cloud-Based
  • Cloud-Based Applications
  • Cloud-Based Architectures
  • Cloud-Based Data Platforms
  • Cloud-Based Infrastructure
  • Cloud-Based Products
  • Cloud-Based Software
  • Cloud-Based Technologies
  • Cloud-Native Distributed Systems
  • Cloud-based Environments
  • Cloud-based Human Resources Solutions
  • Cloud-based Services
  • Cloud-based Solutions
  • Cloud-native Applications
  • Cloud-native Architectures
  • Cloud-native Design
  • Cloud-native Development
  • Cloud-native Platforms
  • Cloud-native Services
  • Cloud-native Solutions
  • Cloud-native Tech
  • Cloud-native Technologies
  • Clouds
  • Cluster Management
  • Clustering
  • Coals
  • Code Analysis
  • Code Coverages
  • Code Debuggings
  • Code Generations
  • Code Hosting
  • Code Inspections
  • Code Management
  • Code Quality
  • Code Refactorings
  • Code Repositories
  • Code Reviews
  • Code Versioning Tools
  • Codes
  • Collaboration Tools
  • Collaborations
  • Collaborative Development
  • Collaterals
  • Collections
  • Command Lines
  • Commerce
  • Commercial Services
  • Commodities
  • Common Sense
  • Communication Tools
  • Communications
  • Communities
  • Community Driven
  • Community Engagements
  • Community Healths
  • Community Platforms
  • Compatibilities
  • Compatibility Testing
  • Competency Frameworks
  • Competitive Analysis
  • Competitive Intelligence
  • Competitor Analysis
  • Compilations
  • Compilers
  • Complex Systems
  • Complexity Analysis
  • Compliance
  • Compliance Automation
  • Compliance Expertises
  • Compliance Frameworks
  • Compliance Management
  • Compliance Managers
  • Compliance Mappings
  • Compliance Monitoring
  • Compliance Monitoring Programs
  • Compliance Oversights
  • Compliance Policies
  • Compliance Solutions
  • Compliance Technologies
  • Compliance Tools
  • Component Architectures
  • Component Based
  • Component Engineering
  • Component Frameworks
  • Component Libraries
  • Compressions
  • Computational Linguistics
  • Computational Modeling
  • Computations
  • Computer Aided Design
  • Computer Aided Engineering
  • Computer Aided Manufacturing
  • Computer Applications
  • Computer Graphics
  • Computer Sciences
  • Computer Systems
  • Computer Visions
  • Computer-Aided Design/Computer-Aided Manufacturing
  • Computers
  • Computes
  • Computing
  • Concurrencies
  • Conferences
  • Conferencings
  • Configuration Audits
  • Configuration Management
  • Configuration Management Tools
  • Configurations
  • Connection Management
  • Connectivity
  • Connectors
  • Construction
  • Consulting Services
  • Consultings
  • Consumer Behaviors
  • Consumer Electronics
  • Consumer Protection
  • Contact Centers
  • Contact Management
  • Contacts
  • Container Images
  • Container Management
  • Container Networking
  • Container Orchestration
  • Container Platforms
  • Container Registries
  • Container Runtimes
  • Container Securities
  • Containerization
  • Containerization Technologies
  • Containerized Applications
  • Containerized Deployments
  • Containerized Environments
  • Containerized Microservices
  • Containerized Workloads
  • Containers
  • Content Creations
  • Content Deliveries
  • Content Delivery Networks
  • Content Filterings
  • Content Generations
  • Content Integrations
  • Content Management
  • Content Management Systems
  • Content Marketing
  • Content Personalizations
  • Content Sharing
  • 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 Planes
  • Control Systems
  • Controllers
  • Controls
  • Conversational AI
  • Conversion Optimizations
  • Conversion Rate Optimizations
  • Coordinates
  • Copywritings
  • Core Banking
  • Core Systems
  • Corporate Finances
  • Corporate Learning
  • Cost Accounting
  • Cost Controls
  • Cost Management
  • Cost Optimizations
  • Country-Specific
  • Crawlings
  • Creative Productions
  • Creative Software
  • Creative Suites
  • Creative Tools
  • Credentials
  • Credit Applications
  • Credit Cards
  • Credit Risk Modeling
  • Credit Risks
  • Credit Valuation Adjustments
  • Crisis Management
  • Critical Thinkings
  • Cross Languages
  • Cross Platforms
  • Cross Validation
  • Cross-border Payments
  • Cross-browser Compatibilities
  • Cross-browser Testing
  • Cryptographies
  • Cs
  • Currencies
  • Custodies
  • Custom Development
  • Custom Solutions
  • Customer Analytics
  • Customer Data
  • Customer Data Platforms
  • Customer Databases
  • Customer Engagements
  • Customer Experiences
  • Customer Feedback
  • Customer Intelligence
  • Customer Journey Mappings
  • Customer Journeys
  • Customer Management
  • Customer Onboardings
  • Customer Relationship Management
  • Customer Satisfactions
  • Customer Segmentations
  • Customer Service
  • Customer Success
  • Customer Support
  • Customizations
  • Customs
  • Customs Brokerages
  • Cyber Defenses
  • Cyber Securities
  • Cybersecurities
  • Cybersecurity Frameworks
  • DNS, DHCP, and IP Address Management
  • Daemons
  • Dashboards
  • Data
  • Data Access
  • Data Acquisition
  • Data Activations
  • Data Analysis
  • Data Analysis Software
  • Data Analysis Techniques
  • Data Analysis Tools
  • Data Analysis Tools And Techniques
  • Data Analytics
  • Data Analytics Platforms
  • Data Analytics Technologies
  • Data Analytics Tools
  • Data Annotations
  • Data Architectures
  • Data At Rest Encryptions
  • Data Capabilities
  • Data Captures
  • Data Catalogs
  • Data Center Infrastructure
  • Data Center Operations
  • Data Center Services
  • Data Centers
  • Data Centres
  • Data Certifications
  • Data Cleanings
  • Data Cleansing
  • Data Cleanups
  • Data Collection Systems
  • Data Collection Tools
  • Data Collections
  • Data Consumptions
  • Data Conversions
  • Data Dashboards
  • Data Discoveries
  • Data Distributions
  • Data Drifts
  • Data Encryptions
  • Data Engineering
  • Data Engines
  • Data Enrichments
  • Data Entries
  • Data Exchanges
  • Data Explorations
  • Data Extractions
  • Data Fabrics
  • Data Factories
  • Data Fetchings
  • Data Flows
  • Data Foundations
  • Data Gatherings
  • Data Governance
  • Data Governance Frameworks
  • Data Governance Policies
  • Data Governance Strategies
  • Data Governance Tools
  • Data Handling
  • Data Import/Export
  • Data Infrastructure
  • Data Ingestions
  • Data Insights
  • Data Integrations
  • Data Integrity
  • Data Intelligence
  • Data Interpretations
  • Data Labelings
  • Data Lake Storage
  • Data Lakes
  • Data Licensings
  • Data Lifecycle
  • Data Lifecycle Management
  • Data Lineages
  • Data Loadings
  • Data Loss Preventions
  • Data Management
  • Data Management Platforms
  • Data Management Systems
  • Data Management Tools
  • Data Manipulations
  • Data Marketplaces
  • Data Meshes
  • Data Migrations
  • Data Mining
  • Data Monitoring
  • Data Movements
  • Data Observability
  • Data Operations
  • Data Orchestration
  • Data Parsings
  • Data Persistences
  • Data Pipelines
  • Data Platforms
  • Data Preparations
  • Data Privacies
  • Data Privacy Rules
  • Data Processes
  • Data Processing
  • Data Processing Frameworks
  • Data Processing Pipelines
  • Data Processing Platforms
  • Data Products
  • Data Profilings
  • Data Protection
  • Data Providers
  • Data Publishings
  • Data Quality
  • Data Quality Checks
  • Data Quality Controls
  • Data Quality Frameworks
  • Data Quality Management
  • Data Quality Tools
  • Data Reconciliations
  • Data Reportings
  • Data Retentions
  • Data Retrievals
  • Data Risk Management
  • Data Science Libraries
  • Data Science Models
  • Data Science Techniques
  • Data Science Workflows
  • Data Sciences
  • Data Securities
  • Data Security And Privacies
  • Data Serializations
  • Data Services
  • Data Sharing
  • Data Stacks
  • Data Storage
  • Data Storytellings
  • Data Strategies
  • Data Streamings
  • Data Structures
  • Data Synchronizations
  • Data Systems
  • Data Technologies
  • Data Testing
  • Data Tools
  • Data Tracking
  • Data Transfers
  • Data Transformations
  • Data Validation
  • Data Vaults
  • Data Visualisations
  • Data Visualization Platforms
  • Data Visualization Software
  • Data Visualization Tools
  • Data Visualizations
  • Data Warehouse Technologies
  • Data Warehouses
  • Data Warehousing
  • Data Wranglings
  • Data and Analytics
  • Data-Driven
  • Data-Driven Development
  • Data-Driven Processes
  • Data-Driven Products
  • Data-Informed Decision Making
  • Data-driven Decision Making
  • Data-driven Insights
  • Data-driven Optimizations
  • Database Administration
  • Database Architectures
  • Database Design
  • Database Management
  • Database Management Tools
  • Database Performance Tuning
  • Database Queries
  • Database Securities
  • Database Systems
  • Database Technologies
  • Databases
  • Debuggings
  • Decentralized
  • Decentralized Autonomous Organizations
  • Decision Automation
  • Decision Making
  • Decision Sciences
  • Decision Support
  • Decisioning Models
  • Deep Learning
  • Defis
  • Deliveries
  • Dependencies
  • Dependency Management
  • Dependency Mappings
  • Dependency Tracking
  • Deployment Automation
  • Deployment Pipelines
  • Deployment Plannings
  • Deployment Practices
  • Deployment Strategies
  • Deployment Tools
  • Deployments
  • Derbies
  • Derivatives
  • Design
  • Design Guidelines
  • Design Principles
  • Design Reviews
  • Design Software
  • Design Systems
  • Design Thinkings
  • Design Tools
  • Design Validation
  • Desktop Applications
  • Desktop Software
  • Desktops
  • DevOps Practices
  • DevOps Tools
  • Developer Experiences
  • Developer Portals
  • Developer Productivity Tools
  • Developer Tools
  • Development
  • Development Lifecycle
  • Development Operations
  • Development Platforms
  • Development Practices
  • Development Process
  • Development Software
  • Development Tools
  • Device Drivers
  • Device Management
  • Diagnostic Tools
  • Diagnostics
  • Diagrammings
  • Digital Ads
  • Digital Advertising
  • Digital Arts
  • Digital Assets
  • Digital Banking
  • Digital Certificates
  • Digital Channels
  • Digital Commerce
  • Digital Contents
  • Digital Distributions
  • Digital Engagements
  • Digital Events
  • Digital Experiences
  • Digital Forms
  • Digital Identities
  • Digital Infrastructure
  • Digital Marketing
  • Digital Marketing Technologies
  • Digital Media
  • Digital Operations
  • Digital Payments
  • Digital Products
  • Digital Rights
  • Digital Services
  • Digital Solutions
  • Digital Storytellings
  • 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
  • Distributed
  • Distributed Applications
  • Distributed Computing
  • Distributed Coordinations
  • Distributed Data Processing
  • Distributed Databases
  • Distributed Environments
  • Distributed Storage
  • Distributed Systems
  • Distributed Tracing
  • Distributed Trainings
  • Distribution Systems
  • Distributions
  • Document Analysis
  • Document Creations
  • Document Databases
  • Document Management
  • Document Object Models
  • Document Processing
  • Document Stores
  • Documentaries
  • Documentations
  • Documents
  • Domain Adaptations
  • Drift Detections
  • Due Diligences
  • Dynamic Application Security Testing
  • Dynamic Contents
  • Dynamic Pricings
  • Dynamics
  • E-commerces
  • E-learnings
  • E-mails
  • E-signatures
  • ERP
  • ESB
  • Ecommerces
  • Econometric Models
  • Econometrics
  • Economic Analysis
  • Economic Data
  • Economics
  • Ecosystems
  • Edge Computing
  • Ediscoveries
  • Edteches
  • Educations
  • Efficiencies
  • Efficiency Optimizations
  • Elections
  • Electric Vehicles
  • Electrical Grids
  • Electrical Infrastructure
  • Electronic Communications
  • Electronic Data Interchange
  • Electronic Platforms
  • Electronic Signatures
  • Electronics
  • Email Marketing
  • Email Securities
  • Emails
  • Embedded Systems
  • Embeddings
  • Emergency Responses
  • Employee Benefits
  • Employee Development
  • Employee Engagements
  • Employee Experiences
  • Employee Networks
  • Employment
  • Enablement
  • Enablement Platforms
  • Encryptions
  • End To End
  • End-to-end Testing
  • Endpoint Management
  • Endpoint Securities
  • Energies
  • Energy Efficiencies
  • Energy Generations
  • Energy Infrastructure
  • Energy Management
  • Engineering
  • Enterprise AI
  • Enterprise Applications
  • Enterprise Architectures
  • Enterprise Automation
  • Enterprise Communications
  • Enterprise Content Management
  • Enterprise Data
  • Enterprise IT
  • Enterprise Integrations
  • Enterprise Management
  • Enterprise Mobilities
  • Enterprise Performance Management
  • Enterprise Resource Planning
  • Enterprise Risk Management
  • Enterprise Risks
  • Enterprise Searches
  • Enterprise Securities
  • Enterprise Service Bus
  • Enterprise Software
  • Enterprise Solutions
  • Enterprise Systems
  • Enterprise Technologies
  • Enterprises
  • Entertainment Systems
  • Entertainments
  • Entity Data
  • Entity Framework Cores
  • Entity Resolutions
  • Entrepreneurships
  • Environment Management
  • Equipments
  • Equities
  • Error Handling
  • Estate Plannings
  • Estimations
  • Ethical Hackings
  • Ethics
  • Evaluation Frameworks
  • Evaluations
  • Evasion Techniques
  • Event Driven
  • Event Handling
  • Event Management
  • Event Marketing
  • Event Meshes
  • Event Plannings
  • Event Processing
  • Event Streamings
  • Event Technologies
  • Event-driven Systems
  • Events
  • Examples
  • Excels
  • Executions
  • Executive Reportings
  • Expense Management
  • Experiment Design
  • Experimentations
  • Exploitations
  • Exploratory Data Analysis
  • Extended Detection and Responses
  • Extensions
  • External Dependencies
  • External Services
  • External Systems
  • Extract Transform Loads
  • Facilities Management
  • Fault Tolerances
  • Fault Tolerants
  • Feature Engineering
  • Feature Enhancements
  • Feature Stores
  • Feature Testing
  • Federations
  • Feedback
  • Feedback Collections
  • Feedback Controls
  • Feedback Systems
  • File Storage
  • Filmmakings
  • Finances
  • Financial Accounting
  • Financial Analysis
  • Financial Analytics
  • Financial Controls
  • Financial Crimes
  • Financial Data
  • Financial Infrastructure
  • Financial Management
  • Financial Mathematics
  • Financial Media
  • Financial Messaging
  • Financial Modeling
  • Financial Models
  • Financial Operations
  • Financial Plannings
  • Financial Policies
  • Financial Reportings
  • Financial Risk Management
  • Financial Securities
  • Financial Services
  • Financial Software
  • Financial Stabilities
  • Financial Systems
  • Financial Technologies
  • Fine-tunings
  • Fintech
  • Firewalls
  • Firmwares
  • First-Party Data
  • Flashes
  • Flexibilities
  • Flexible Workings
  • Flinks
  • Floor Plannings
  • Flow Data
  • Food Safety
  • Forecasting
  • Forecasting Models
  • Foreign Exchanges
  • Forexes
  • Forge
  • Form Validation
  • Formal Verifications
  • Formatting Objects Processors
  • Forms
  • Foundations
  • Frameworks
  • Fraud Detection Systems
  • Fraud Detections
  • Fraud Preventions
  • Frenches
  • Front-ends
  • Frontend Development
  • Frontend Frameworks
  • Frontends
  • Full Stack Development
  • Full Stacks
  • Functional Testing
  • Functions
  • Fund Management
  • Futures
  • Game Developers
  • Game Development
  • Game Engines
  • Gaming Consoles
  • Gamings
  • Gateways
  • General Ledger Systems
  • General Ledgers
  • Generative AI
  • Generative Modeling
  • Generative Models
  • Geographies
  • Geolocations
  • Geospatials
  • GitHub Copilots
  • Global Markets
  • Global Positioning Systems
  • Globalizations
  • Goal Settings
  • Google Cloud Functions
  • Governance
  • Governance Frameworks
  • Governance Tools
  • Government
  • Government Relations
  • Government Systems
  • Graph Databases
  • Graphic Design
  • Graphical User Interfaces
  • Graphics
  • Graphics Processing Units
  • Graphings
  • Graphs
  • HCM
  • HR Analytics
  • HR Systems
  • HR Tech
  • HR Technologies
  • Hadoop Distributed File Systems
  • Hardenings
  • Hardware
  • Hardware Optimizations
  • Hardware Testing
  • Hbases
  • Health Infrastructure
  • Healthcare
  • Heating, Ventilation, and Air Conditionings
  • Hedging
  • Help Desks
  • High Availabilities
  • High Performance Computing
  • High Performances
  • High Throughputs
  • Hirings
  • Hospitality
  • Hosting
  • Human Capital Management
  • Human Computer Interactions
  • Human Factors
  • Human Resources
  • Hybrid Clouds
  • Hyperconverged Infrastructure
  • Hypervisors
  • Hypothesis Testing
  • IPAM
  • IT Architectures
  • IT Audits
  • IT Governance
  • IT Infrastructure
  • IT Management
  • IT Operations
  • IT Project Management
  • IT Risks
  • IT Service Management
  • IT Services
  • IT Strategies
  • Ideas
  • Ideations
  • Identities
  • Identity And Access Management
  • Identity Management
  • Identity Providers
  • Identity Verifications
  • Illuminations
  • Image Editings
  • Image Generations
  • Image Processing
  • Implementations
  • In Memories
  • Incident Management
  • Incident Management Systems
  • Incident Response Management
  • Incident Responses
  • Inclusive Design
  • Incubation
  • Indexings
  • Industrial Automation
  • Industrial Engineering
  • Industrial Iots
  • Industry Analysis
  • Inference Optimizations
  • Inferences
  • Informatics
  • Information Architectures
  • Information Governance
  • Information Management
  • Information Protection
  • Information Retrievals
  • Information Securities
  • Information Security Controls
  • Information Security Risk Management
  • Information Sharing
  • Information Systems
  • Information Technologies
  • Information Technology Infrastructure
  • Infrastructure
  • Infrastructure As A Services
  • Infrastructure As Codes
  • Infrastructure Components
  • Infrastructure Improvements
  • Infrastructure Management
  • Infrastructure Monitoring
  • Infrastructure Securities
  • Infrastructure Testing
  • Infrastructure-as-a-Service
  • Innovation
  • Input Sanitizations
  • Insights
  • Inspections
  • Instant Messaging
  • Instrumentations
  • Insurances
  • Integrated Development Environments
  • Integrated Solutions
  • Integration Frameworks
  • Integration Platforms
  • Integration Strategies
  • Integration Testing
  • Integration Tests
  • Integration Workflows
  • Integrations
  • Integrity
  • Intellectual Properties
  • Intelligence
  • Intelligent Systems
  • Intent Data
  • Intent-Based Networking
  • Interactive Contents
  • Interactive Design
  • Interactive Media
  • Interactive Prototypes
  • Interactive Voice Responses
  • Interactives
  • Interface Design
  • Interfaces
  • Internal Applications
  • Internal Audits
  • Internal Clouds
  • Internal Communications
  • Internal Control Frameworks
  • Internal Controls
  • Internal Databases
  • Internal Networks
  • Internal Platforms
  • Internal Systems
  • Internal Tools
  • Internal Wikis
  • International Laws
  • International Markets
  • International Relations
  • International Trades
  • Internationalizations
  • Internet
  • Internet Applications
  • Internet Securities
  • Internet Technologies
  • Internet of Things
  • Interoperabilities
  • Intranets
  • Intrusion Detection Systems
  • Intrusion Detections
  • Inventory Management
  • Inventory Software
  • Investment Analysis
  • Investment Banking
  • Investment Funds
  • Investment Management
  • Investments
  • Investor Relations
  • Invoice Processing
  • Isolations
  • Issue Trackers
  • Issue Tracking
  • Iterative Development
  • Ivies
  • Java Virtual Machines
  • Job Boards
  • Job Schedulers
  • Job Scheduling
  • Journalism
  • Journey Builders
  • Journey Mappings
  • Kernel Development
  • Kernels
  • Key Management
  • Key Metrics
  • Key Values
  • Know Your Customers
  • Knowledge Bases
  • Knowledge Graphs
  • Knowledge Management
  • Knowledge Sharing
  • LLM
  • Language Understandings
  • Large Data Sets
  • Large Databases
  • Large Datasets
  • Large Distributed Systems
  • Large Language Models
  • Large-Scale System Design
  • Large-scale Data Analysis
  • Large-scale Data Platforms
  • Large-scale Distributed Systems
  • Latency Reductions
  • Launch Strategies
  • Law Enforcements
  • Layer 2S
  • Lead Generations
  • Lead Management
  • Leaderships
  • Learning
  • Learning And Development
  • Learning Management
  • Learning Management Systems (LMS)
  • Learning Technologies
  • Ledgers
  • Legacy Systems
  • Legal
  • Legal Compliances
  • Legal Frameworks
  • Legal Tech
  • Legal Technologies
  • Lendings
  • Lessons Learned
  • Letters Of Credits
  • Libraries
  • License Compliances
  • 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
  • Localization Workflows
  • Localizations
  • Log Analysis
  • Log Analytics
  • Log Collections
  • Log Management
  • Logging
  • Logistic Regressions
  • Logistics
  • Low Codes
  • Low Latencies
  • Low Level Programming
  • Low-Code Platforms
  • M&AS
  • ML Engineering
  • Machine Learning
  • Machine Learning Algorithms
  • Machine Learning Engineering
  • Machine Learning Frameworks
  • Machine Learning Lifecycle
  • Machine Learning Models
  • Machine Learning Platforms
  • Machine Learning Systems
  • Machine Learning Technologies
  • Machinings
  • Mails
  • Mainframes
  • Maintenance
  • Major Incident Management
  • 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 Makers
  • 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
  • Mastodons
  • Material Design
  • Material Handling
  • Mathematical Modeling
  • Mathematics
  • Matrixes
  • Measurements
  • Mechanical Systems
  • Media
  • Media Contents
  • Media Management
  • Media Monitoring
  • Media Productions
  • Mediations
  • Medical Devices
  • Meeting Management
  • Meetings
  • Memory Management
  • Mental Healths
  • Mentoring
  • Mergers And Acquisitions
  • Message Brokers
  • Message Queues
  • Message Queuings
  • Messaging
  • Messaging Infrastructure
  • Messaging Platforms
  • Messaging Queues
  • Messaging Systems
  • Metadata
  • Metadata Management
  • Metrics
  • Micro-services
  • Microcontrollers
  • Microservice-based Architectures
  • Microservices
  • Microsoft Access
  • Middlewares
  • Migration Plannings
  • Migrations
  • Milestone Tracking
  • Mission Critical
  • Mobile Applications
  • Mobile Apps
  • Mobile Development
  • Mobile Device Management
  • Mobile Devices
  • Mobile Operating Systems
  • Mobile Technologies
  • Mobile Testing
  • Mobiles
  • Mockings
  • Mocks
  • Model Adaptations
  • Model Architectures
  • Model Compressions
  • Model Context Protocols
  • Model Context Protocols (MCP)
  • Model Deployments
  • Model Development
  • Model Evaluations
  • Model Fine-tunings
  • Model Governance
  • Model Integrity
  • Model Lifecycle Management
  • Model Maintenance
  • Model Management
  • Model Monitoring
  • Model Observability
  • Model Optimizations
  • Model Orchestration
  • Model Performance
  • Model Retrainings
  • Model Servings
  • Model Testing
  • Model Trainings
  • Model Validation
  • Model Versionings
  • Modeling
  • Modeling Platforms
  • Modeling Tools
  • Modern Digital Tools
  • Modernizations
  • Modularity
  • Monetizations
  • Monitoring
  • Monitoring And Controls
  • Monitoring Services
  • Monitoring Software
  • Monitoring Tools
  • Monte Carloes
  • Ms Products
  • Multi Clouds
  • Multi-Agent Systems
  • Multi-Factor Authentications
  • Multi-channels
  • Multi-clusters
  • Multi-platforms
  • Multi-regions
  • Multimedia Platforms
  • Multimedias
  • Multimodal AI
  • Multimodals
  • Multiplatforms
  • Multiple Systems
  • NLP
  • Named Entity Recognitions
  • Natural Language Processing
  • Navigation
  • Negotiations
  • Netwerkens
  • Network Analysis
  • Network Architectures
  • Network Automation
  • Network Automation Tools
  • Network Configurations
  • Network Design
  • Network Devices
  • Network Effects
  • Network Engineering
  • Network Infrastructure
  • Network Management
  • Network Monitoring
  • Network Optimizations
  • Network Performance
  • Network Performance Management
  • Network Programming
  • Network Securities
  • Network Simulations
  • Network Topologies
  • Networking
  • Neural Networks
  • Neurodiversities
  • New Tabs
  • News
  • Newsletters
  • NoSQL
  • Nonprofits
  • Nostro
  • Notebooks
  • Notifications
  • Nuclear Energies
  • OIA
  • OLE for Process Controls
  • ORM
  • OSX
  • Object Storage
  • Object Stores
  • Object-Oriented
  • Observability
  • Observability Platforms
  • Observability Stacks
  • Observability Toolings
  • Observability Tools
  • Office Applications
  • Office Management
  • Office Software
  • Office Suites
  • Omnichannels
  • On Demands
  • On-Call Management
  • On-Premise Software
  • Onboardings
  • Online Advertising
  • Online Analytical Processing
  • Online Demonstrations
  • Online Services
  • Online Shoppings
  • Online Tools
  • Online Transaction Processing
  • Ontologies
  • Open Source
  • Open Source Securities
  • Open-Source Software
  • Open-Source Solutions
  • Open-source Libraries
  • Open-source Technologies
  • Open-source Tools
  • Operating System Securities
  • Operating Systems
  • Operational Architectures
  • Operational Efficiencies
  • Operational Excellence
  • Operational Intelligence
  • Operational Metrics
  • Operational Practices
  • Operational Reportings
  • Operational Resiliences
  • Operational Risks
  • Operational Safety
  • Operational Systems
  • Operational Technologies
  • Operations
  • Operations Management
  • Operations Researches
  • Operations Solutions
  • Operators
  • Optical Character Recognitions
  • Optimization Techniques
  • Optimizations
  • Options
  • Orchestration
  • Order Books
  • Order Executions
  • Order Management
  • Organizational Changes
  • Organizational Design
  • Organizational Development
  • Organizational Structures
  • Organizational Transformations
  • Organizations
  • Outils Internes
  • Outlier Detections
  • Package Management
  • Package Managers
  • Packages
  • Packaging
  • Packaging Innovation
  • Packet Captures
  • Packet Inspections
  • Packet Loss
  • Paid Media
  • Pair Programming
  • Parallel Computing
  • Parallel Processing
  • Patch Management
  • Pattern Matchings
  • Pattern Recognitions
  • Patterns
  • Pay Per Clicks
  • Payment Processing
  • Payment Solutions
  • Payment Systems
  • Payments
  • Payments Securities
  • 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
  • Persistence Technologies
  • Persistences
  • Persistent Memories
  • Personal Finances
  • Personalizations
  • Pharmaceuticals
  • Photo Editings
  • Photographies
  • Physical Securities
  • Physics Simulations
  • Pigs
  • Pipeline Management
  • Pipeline Orchestration
  • Pipelines
  • Pivot Tables
  • Planning Analytics
  • Plannings
  • Platform As A Services
  • Platform Development
  • Platform Ecosystems
  • Platform Engineering
  • Platform Management
  • Platform Modernizations
  • Platform Securities
  • Platform Services
  • Platform Software
  • Platform Solutions
  • Platform Strategies
  • Platform Systems
  • Platform-as-a-Service
  • Platforms
  • Plottings
  • Plugins
  • Point Of Sales
  • Policies
  • Policy Analysis
  • Policy Enforcements
  • Policy Management
  • Political Engagements
  • Portabilities
  • Portables
  • Portals
  • Portfolio Management
  • Portfolio Reviews
  • Post Productions
  • Postmortems
  • Power Distributions
  • Power Generations
  • Power Plants
  • Power Tools
  • Power Transmissions
  • Practice Management
  • Pre-trainings
  • Predictabilities
  • Predictions
  • Predictive Analytics
  • Predictive Modeling
  • Presentation Software
  • Presentations
  • Pricing Analytics
  • Pricing Models
  • Pricing Strategies
  • Pricing Systems
  • Pricing Tools
  • Pricings
  • Prioritizations
  • Privacy
  • Privacy Impact Assessments
  • Private Clouds
  • Privilege Escalations
  • Probabilistic Models
  • Probabilities
  • Problem Management
  • Problem Resolutions
  • Problem Solving
  • Process Analysis
  • Process Automation
  • Process Builders
  • Process Controls
  • Process Design
  • Process Documentations
  • Process Engineering
  • Process Improvements
  • Process Management
  • Process Mappings
  • Process Maps
  • Process Mining
  • Process Monitoring
  • Process Optimizations
  • Process Orchestration
  • Process Re-engineerings
  • Process Reengineerings
  • Processes
  • Procurements
  • Product Analytics
  • Product Areas
  • Product Costings
  • Product Design
  • Product Design And Development Process
  • Product Development
  • Product Development Lifecycle
  • Product Integrations
  • Product Lifecycle Management
  • Product Management
  • Product Management Tools
  • Product Masters
  • Product Owners
  • Product Ownerships
  • Product Platforms
  • Product Roadmaps
  • Product Securities
  • Product Strategies
  • Product Testing
  • Product Upgrades
  • 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 Governance
  • Project Life-cycles
  • Project Management
  • Project Management Processes
  • Project Management Tools
  • Project Schedules
  • Projects
  • Prompt Engineering
  • Promptings
  • Prompts
  • Property Management
  • Proprietary Software
  • 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 Assurance Processes
  • Quality Assurance Testing
  • Quality Controls
  • Quality Frameworks
  • Quality Management
  • Quality Metrics
  • Quality Monitoring Systems
  • Quality Testing
  • Quality Tools
  • Quantitative Analysis
  • Quantitative Finances
  • Quantitative Methods
  • Quantitative Modeling
  • Quantum Computing
  • Query Engines
  • Query Languages
  • Query Optimizations
  • Query Processing
  • Query Understandings
  • Question Answerings
  • Queues
  • Rapid Development
  • Rapid Prototyping
  • Rate Limitings
  • Ratings
  • Reactives
  • Real Estates
  • Real Time
  • Real-Time Communications
  • Real-Time Operating Systems
  • Real-time Analytics
  • Real-time Applications
  • Real-time Data
  • Real-time Experiences
  • Real-time Inferences
  • Real-time Insights
  • Real-time Monitoring
  • Real-time Operations
  • Real-time Processing
  • Real-time Rendering
  • Real-time Streamings
  • Real-time Systems
  • Real-time Visibility
  • Reasonings
  • Recipes
  • Recommendation Engines
  • Recommendation Systems
  • Reconciliation Systems
  • Reconciliations
  • Reconnaissances
  • Record Keepings
  • Recordings
  • Records Management
  • Recruitings
  • Recruitment
  • Reference Models
  • Registrations
  • Regression Analysis
  • Regression Testing
  • Regulatory Affairs
  • Regulatory Analysis
  • Regulatory Compliances
  • Regulatory Reportings
  • Reinforcement Learning
  • Relational Data
  • Relational Database Management Systems
  • Relational Databases
  • Relationals
  • Relationship Buildings
  • Relationship Management
  • Release Activities
  • Release Engineering
  • Release Management
  • Release Pipelines
  • Release Plannings
  • Reliabilities
  • Reliability Engineering
  • Remittances
  • Remote Access
  • Remote Collaborations
  • Remote Desktops
  • Remote Works
  • Rendering
  • Rendering Engines
  • Renewable Energies
  • Replication Workflows
  • Replications
  • Reporting And Analytics
  • Reporting And Analytics Tools
  • Reporting And Measurements
  • Reporting Dashboards
  • Reporting Frameworks
  • Reporting Mechanisms
  • Reporting Platforms
  • Reporting Solutions
  • Reporting Systems
  • Reporting Tools
  • Reportings
  • Repository Management
  • Requirements
  • Requirements Gatherings
  • Research
  • Research Data
  • Research Methods
  • Research Tools
  • Resiliences
  • Resiliency
  • Resilient Architectures
  • Resilient Systems
  • Resource Allocations
  • Resource Management
  • Resource Plannings
  • Resource Scheduling
  • Responsive Design
  • Rest Assured
  • Retails
  • Retrofittings
  • Retry Logics
  • Reusable Components
  • Revenue Generations
  • Revenue Management
  • Revenue Models
  • Revenue Operations
  • Revenue Optimizations
  • Revenue Strategies
  • Revenues
  • Reverse Proxies
  • Review And Approvals
  • Reviews
  • Rich Internet Applications
  • Risk Analysis
  • Risk Assessments
  • Risk Management
  • Risk Management Plans
  • Risk Models
  • Roadmappings
  • Robotic Process Automation
  • Robotics
  • Robustness
  • Root Cause Analysis
  • Routers
  • Routings
  • Runtime Environments
  • Runtime Securities
  • Runtimes
  • SQL Databases
  • SaaS Marketplaces
  • SaaS Solutions
  • Safes
  • Safety
  • Safety Engineering
  • Sales
  • Sales Analytics
  • Sales Automation
  • Sales Clouds
  • 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
  • Search Indexings
  • Secrets Management
  • Secure Architecture Design
  • Secure Architectures
  • Secure Code Reviews
  • Secure Coding Practices
  • Secure Codings
  • Secure Communications
  • Secure Configurations
  • Secure Design
  • Secure Development
  • Secure Platforms
  • Secure Software Development
  • Security
  • Security Analysis
  • Security Analytics
  • Security Architecture Reviews
  • Security Architectures
  • Security Assessments
  • Security Audits
  • Security Automation
  • Security Awareness Trainings
  • Security Best Practices
  • Security Compliances
  • Security Controls
  • Security Design
  • Security Development Lifecycle
  • Security Engineering
  • Security Equipments
  • Security Frameworks
  • Security Governance
  • Security Groups
  • Security Incident Responses
  • Security Information and Event Management
  • Security Infrastructure
  • Security Intelligence
  • Security Management
  • Security Measures
  • Security Mechanisms
  • Security Models
  • Security Monitoring
  • Security Operations
  • Security Orchestration, Automation and Responses
  • Security Patchings
  • Security Platforms
  • Security Requirements
  • Security Reviews
  • Security Risk Assessments
  • Security Solutions
  • Security Systems
  • Security Testing
  • Security Tools
  • Segmentations
  • Self Services
  • Self-Hosted
  • Self-Service Dashboards
  • Self-healings
  • Self-improvements
  • Semantic Parsings
  • Semantic Searches
  • Semantic Webs
  • Sensors
  • Serializations
  • Server-Side Rendering
  • Serverless
  • Serverless Architectures
  • Servers
  • Service Assurance
  • Service Bus
  • Service Catalogs
  • Service Clouds
  • Service Deliveries
  • Service Design
  • Service Desks
  • Service Discoveries
  • Service Frameworks
  • Service Governance
  • Service Level Objectives (SLOs)
  • Service Management
  • Service Meshes
  • Service Operations
  • Service Recovery
  • Service Strategies
  • Services
  • Servlet Containers
  • Servlets
  • Settlements
  • Shared Resources
  • Shared Responsibilities
  • Shells
  • Shippings
  • Short Message Services
  • Signal Processing
  • Simple API for XML
  • Simulation Environments
  • Simulation Modeling
  • Simulation Tools
  • Simulations
  • Simulators
  • Site Reliability Engineering
  • Skill Development
  • Skills Development
  • Slides
  • Smart Grids
  • Smart Homes
  • Smartphones
  • Social
  • Social Data
  • Social Media
  • Social Media Marketing
  • Social Networking
  • Social Networks
  • Software
  • Software Applications
  • Software Architectures
  • Software Asset Management
  • Software Bill Of Materials
  • Software Composition Analysis
  • Software Configuration Management
  • Software Configurations
  • Software Deliveries
  • Software Deployments
  • Software Design
  • Software Development
  • Software Development Best Practices
  • Software Development Kits
  • Software Distributions
  • Software Engineering
  • Software Infrastructure
  • Software Interfaces
  • Software Languages
  • Software Licensings
  • Software Management
  • Software Platforms
  • Software Projects
  • Software Quality
  • Software Solutions
  • Software Supply Chain Securities
  • Software Systems
  • Software Technologies
  • Software Testing
  • Software Testing Methodologies
  • Software Tools
  • Software Troubleshooting
  • Software Upgrades
  • Software as a Services
  • Software-as-a-Service
  • Solutions
  • Source Code Management
  • Source Code Management Tools
  • Source Codes
  • Source Control Management
  • Source Controls
  • Source Systems
  • Sourcings
  • Spam Detections
  • Spatial Analytics
  • Spatial Data
  • Spend Management
  • Spitabs
  • Spreadsheets
  • Stakeholder Management
  • Standups
  • Startups
  • State Machines
  • State Management
  • Statefuls
  • Static Analysis
  • Static Application Security Testing
  • Statistical Analysis
  • Statistical Analysis Software
  • Statistical Inferences
  • Statistical Methods
  • Statistical Modeling
  • Statistical Modeling Tools
  • Statistical Modellings
  • Statistical Models
  • Statistical Techniques
  • Statistical Tools
  • Statistics
  • Stochastic Modeling
  • Stock Controls
  • Storage
  • Storage Engines
  • Storage Management
  • Stored Procedures
  • Strategic Design
  • Strategic Plannings
  • Strategies
  • Stream Analytics
  • Stream Processing
  • Streaming Architectures
  • Streaming Data
  • Streamings
  • Stress Testing
  • Stress Tests
  • Strong Consistencies
  • Structured Data
  • Subscription Management
  • Subscription Models
  • Subscriptions
  • Supervised Learning
  • Supplier Management
  • Supply Chain Finances
  • Supply Chain Management
  • Supply Chain Securities
  • Supply Chains
  • Support
  • Support Platforms
  • Support Systems
  • Support Ticketing
  • Surveillances
  • Survey Platforms
  • Survey Tools
  • Sustainability
  • Switches
  • Synthetic Testing
  • System Administration
  • System Analysis
  • System Applications
  • System Architecture Principles
  • System Architectures
  • System Automation
  • System Configurations
  • System Design
  • System Development
  • System Enhancements
  • System Implementations
  • System Information
  • System Integrations
  • System Libraries
  • System Maintenance
  • System Management
  • System Monitoring
  • System Of Records
  • System Operations
  • System Optimizations
  • System Performances
  • System Programming
  • System Requirements
  • System Securities
  • System Services
  • System Software
  • System Solutions
  • System Stabilities
  • System Testing
  • System Tests
  • System Tools
  • System Updates
  • System Utilities
  • Systems
  • Systems Administration
  • Systems Analysis
  • Systems Architectures
  • Systems Design
  • Systems Development
  • Systems Engineering
  • Systems Enhancements
  • Systems Integrations
  • Systems Management
  • Systems Programming
  • Systems Software
  • Systems Thinkings
  • T1S
  • Tableaux De Bords
  • Tablets
  • Tag Management
  • Tainas
  • Talent Acquisition
  • Talent Management
  • Task Automation
  • Task Management
  • Tasks
  • Tax Compliances
  • Tax Laws
  • Tax Plannings
  • Tax Preparations
  • Tax Researches
  • Tax Software
  • Tax Systems
  • Tax Technology Solutions
  • Taxes
  • Tcls
  • Team Chats
  • Team Collaborations
  • Team Communications
  • Team Development
  • Team Management
  • Team Workspaces
  • Technical Debt
  • Technical Plannings
  • Technical Reviews
  • Technical Support
  • Technical Writings
  • Technologies
  • Technology Adoptions
  • Technology Architectures
  • Technology Enhancements
  • Technology Governance
  • Technology Platforms
  • Technology Reviews
  • Technology Risk Management
  • Technology Services
  • Technology Stacks
  • Technology Strategies
  • Telecommunications
  • Telefons
  • Telemetry
  • Telephonies
  • Telewerkens
  • Terminals
  • Territory Management
  • Test Anything Protocols
  • Test Automation
  • Test Automation Frameworks
  • Test Automation Tools
  • Test Case Management
  • Test Controls
  • Test Design
  • Test Engineering
  • Test Environments
  • Test Equipments
  • Test Executions
  • Test Management
  • Test Plannings
  • Test Reportings
  • Test Scriptings
  • Test Strategies
  • Test Tools
  • Test-and-learns
  • Testing Frameworks
  • Testing Strategies
  • Testing Tools
  • Tests
  • Text Analysis
  • Text Extractions
  • Text Processing
  • Third Parties
  • Third Party Risks
  • Third Party Services
  • Third-Party Integrations
  • Third-Party Software
  • Third-Party Technologies
  • Third-party Data
  • Third-party Libraries
  • Third-party Risk Management
  • Third-party Securities
  • Third-party Systems
  • Threat Analysis
  • Threat Detections
  • Threat Huntings
  • Threat Intelligence
  • Threat Management
  • Threat Mitigations
  • Threat Modeling
  • Threat Monitoring
  • Threat Preventions
  • Threat Protection
  • Ticketing
  • Ticketing Systems
  • Tickets
  • Time Management
  • Time Series
  • Time Series Analysis
  • Time Series Databases
  • Time Series Forecasting
  • Time Series Modeling
  • Timelines
  • Tokenizations
  • Tokens
  • Tools
  • Total Rewards
  • Tracing
  • Tracking
  • Tracking Software
  • Tracs
  • Trade Compliances
  • Trade Management
  • Trade Services
  • Trade Settlements
  • Trade Shows
  • Tradings
  • Traffic Analysis
  • Traffic Management
  • Training Data
  • Training Matrixes
  • Training Platforms
  • Trainings
  • Transaction Management
  • Transaction Monitoring
  • Transaction Processing
  • Transfer Learning
  • Transformations
  • Transformers
  • Translations
  • Transparency
  • Transportation
  • Travel Management
  • Travels
  • Traversals
  • Treasuries
  • Treasury Management
  • Treasury Operations
  • Troubleshooting
  • Trust And Safety
  • Tuning
  • Turkishes
  • Type Safes
  • UI
  • UI Design
  • UX
  • UX Design
  • Ubixes
  • Underwritings
  • Unified Communications
  • Unified Models
  • Unit Testing
  • Unixes
  • Unstructured Data
  • Unsupervised Learning
  • Updates
  • Upserts
  • Uptime
  • Usabilities
  • Usability Testing
  • User Acceptance Testing
  • User Analytics
  • User Engagements
  • User Experiences
  • User Feedback
  • User Generated Contents
  • User Guides
  • User Insights
  • User Interface/User Experiences
  • User Interfaces
  • User Journeys
  • User Lifecycle
  • User Management
  • User Provisionings
  • User Researches
  • User Testing
  • Utilities
  • VBA
  • VOIP
  • Validation
  • Validation Rules
  • Validation Tools
  • Valuations
  • Value Streams
  • Vector Databases
  • Vector Graphics
  • Vector Stores
  • Vendor Management
  • Venture Capital
  • Venue Management
  • Venue Selections
  • Venues
  • Verifications
  • Version Control Systems
  • Version Controls
  • Versionings
  • Video Calls
  • Video Chats
  • Video Conferences
  • Video Conferencings
  • Video Editing Tools
  • Video Editings
  • Video Encodings
  • Video Games
  • Video Platforms
  • Video Processing
  • Video Productions
  • Video Software
  • Video Transcodings
  • Videogespreks
  • Videos
  • Virtual Assistants
  • Virtual Desktop Infrastructure
  • Virtual Environments
  • Virtual Events
  • Virtual Machines
  • Virtual Meetings
  • Virtual Networks
  • Virtual Trainings
  • Virtualizations
  • Visibility
  • Visioconférences
  • Visual Design
  • Visual Effects
  • Visual Programming
  • Visualizations
  • Voice
  • Voice Assistants
  • Votings
  • Vues
  • Vulnerability Analysis
  • Vulnerability Assessments
  • Vulnerability Management
  • Vulnerability Management Tools
  • Vulnerability Reductions
  • Vulnerability Scanners
  • Vulnerability Scannings
  • Wallets
  • Warehouse Automation
  • Warehouse Management
  • Warehouse Technologies
  • Web API
  • Web Analytics
  • Web Application Development
  • Web Application Securities
  • Web Applications
  • Web Apps
  • Web Architectures
  • Web Based
  • Web Browsers
  • Web Components
  • Web Conferencings
  • Web Design
  • Web Development
  • Web Frameworks
  • Web Hosting
  • Web Interfaces
  • Web Performances
  • Web Platforms
  • Web Scrapings
  • Web Searches
  • Web Securities
  • Web Servers
  • Web Services
  • Web Systems
  • Web Technologies
  • Web Tools
  • Web-based Applications
  • Web-based Platforms
  • Web3s
  • Webinars
  • Webs
  • Wellbeings
  • Whiteboards
  • Wi-Fi
  • Wikis
  • Windows Servers
  • Wins
  • Words
  • Work From Homes
  • Work Life Balances
  • Workflow Automation
  • Workflow Automation Platforms
  • Workflow Design
  • Workflow Management
  • Workflow Management Tools
  • Workflow Optimizations
  • Workflow Orchestration
  • Workflow Products
  • Workflow Systems
  • Workflow Tools
  • Workflows
  • Workforce Development
  • Workforce Management
  • Working Capital
  • Workload Orchestration
  • Workplace Safety
  • Workplace Technologies
  • Workshops
  • Workspaces

Services — Total: 422

  • ADP
  • AWS Lambda
  • Adobe
  • Adobe Acrobat
  • Adobe Analytics
  • Adobe Campaign
  • Adobe Captivate
  • Adobe Creative Cloud
  • Adobe Creative Suite
  • Adobe Experience Cloud
  • Adobe Illustrator
  • Adobe Launch
  • Adobe Photoshop
  • Adobe Premiere Pro
  • Adobe Suite
  • Airtable
  • Alteryx
  • Amadeus
  • Amazon API Gateway
  • Amazon ECS
  • Amazon Kinesis
  • Amazon Neptune
  • Amazon Q
  • 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
  • Apple
  • Apple Keynote
  • Apple Pay
  • Apple Safari
  • Ariba
  • Artifactory
  • Aruba
  • Asana
  • Atlassian
  • AutoCAD
  • Autodesk
  • Autodesk Fusion 360
  • Autodesk Maya
  • Avalara
  • Azure Active Directory
  • Azure Blob Storage
  • 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 Monitor
  • Azure Service Bus
  • Azure Storage
  • Azure Synapse Analytics
  • Azure Virtual Desktop
  • Backstage
  • BigCommerce
  • Bitbucket
  • Bloomberg
  • Bloomberg AIM
  • Bloomberg EMSX
  • Bloomberg Economics
  • Bloomberg Enterprise Data
  • Bloomberg Index Solutions Limited (BISL)
  • 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
  • Broadcom
  • Brocade
  • BrowserStack
  • Bruno
  • Burp Suite
  • Camtasia
  • Canva
  • ChatGPT
  • Choreo
  • Cilium
  • Circana
  • Cisco
  • Cisco Catalyst Center
  • Cisco Firepower
  • Cisco Hardware
  • Cisco Nexus
  • Cisco Voice Portal
  • Cisco Webex
  • Citrix
  • Citrix NetScaler
  • Claude
  • CloudFormation
  • CloudWatch
  • Cloudflare
  • Cobalt
  • Concur
  • Conductor
  • Confluence
  • Cortex
  • Coupa
  • Crystal Reports
  • Dagster
  • DataHub
  • Databricks
  • Databricks Workflows
  • Datadog
  • Dataiku
  • Dell Servers
  • Demandbase
  • Discord
  • DocuSign
  • DynamoDB
  • Dynatrace
  • EC2
  • EMC
  • Eloqua
  • F5 Networks
  • Facebook
  • Facebook Ads
  • FactSet
  • Fern
  • Figma
  • Fortify
  • Fortinet
  • Fusio
  • G2
  • GCP Cloud Storage
  • Gainsight
  • 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 Logging
  • Google Cloud Platform
  • Google Data Studio
  • Google Dialogflow
  • 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
  • HAProxy
  • Harness
  • HubSpot
  • Hugging Face
  • Hunter
  • Hvault
  • IBM
  • IBM MQ
  • Indeed
  • Infoblox
  • Informatica
  • Informática
  • Instagram
  • IntelliJ IDEA
  • International Business Machines
  • Intuit
  • Istio
  • JFrog
  • JFrog Artifactory
  • JetBrains
  • Jira
  • Juniper
  • Juniper Networks
  • Jupyter Notebook
  • Kestra
  • Kinesis
  • Kion
  • Knit
  • Konfig
  • Kong
  • Kubeflow Pipelines
  • Kuma
  • Lambda
  • Lightroom
  • LinkedIn
  • Linkerd
  • Looker
  • Looker Studio
  • MATLAB
  • MailChimp
  • Make
  • Mastercard
  • Maya
  • 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 Technologies
  • Microsoft Visio
  • Microsoft Windows
  • Microsoft Windows Server
  • Microsoft Word
  • Microsoft Xbox
  • Mistral
  • Montran
  • Moody's
  • MuleSoft
  • NASA
  • Navision
  • Nessus
  • NetApp
  • NetFlow
  • New Relic
  • Notion
  • Nutanix
  • OpenAI
  • OpenAI APIs
  • OpenShift
  • Oracle
  • Oracle APEX
  • Oracle Cloud
  • Oracle Database
  • Oracle Database 19c
  • Oracle E-Business Suite
  • Oracle Enterprise Manager
  • Oracle Essbase
  • Oracle Exadata
  • Oracle Financials
  • Oracle Fusion
  • Oracle GoldenGate
  • Oracle Hyperion
  • Oracle Integration
  • Oracle R12
  • Oracle WebLogic
  • Orbital
  • Orion
  • Palo Alto Networks
  • Panora
  • Paradox
  • Paw
  • PeopleSoft
  • Perforce
  • Perplexity
  • Photoshop
  • Pluralsight
  • Port
  • Postman
  • Power Apps
  • Power BI
  • Power Platform
  • Power Query
  • Prefect
  • Prisma
  • Prismatic
  • Productiv
  • Prosci
  • Pulse
  • QRadar
  • Qlik
  • Qlik Sense
  • Qlik Sense Enterprise
  • QlikSense
  • QlikView
  • Qube
  • ReadMe
  • Red Hat
  • Red Hat Ansible Automation Platform
  • Red Hat Enterprise Linux
  • Red Hat Satellite
  • Revert
  • SAP
  • SAP Ariba
  • SAP BI
  • 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 Experience Cloud
  • Salesforce Flow
  • Salesforce Lightning
  • Salesforce Marketing Cloud
  • Salesforce Sales Cloud
  • Salesforce Service Cloud
  • Scalar
  • Seismic
  • Sentry System
  • Service Cloud
  • ServiceNow
  • SharePoint
  • Shell
  • Shopify
  • SimCorp Dimension
  • Slack
  • Snowflake
  • SolarWinds
  • Solaris
  • Solaris Zones
  • Sparx Enterprise Architect
  • Splunk
  • Splunk Enterprise Security
  • Spot
  • Square
  • Stainless
  • Stripe
  • Sybase
  • Tableau
  • Tableau Desktop
  • Tagetik
  • TeamCity
  • Temenos Transact
  • Temporal
  • Teradata
  • Tradeweb
  • Trellix Web Gateway
  • Triton
  • Twilio
  • Twitch
  • Twitter
  • Tyk
  • Unity
  • Unix
  • VMware
  • Vantage
  • Vendr
  • Vercel
  • Veritas Cluster
  • Veritas InfoScale
  • Veritas NetBackup
  • Veritas Volume Manager
  • Vessel
  • Visio
  • Visualforce
  • WebLogic
  • WebSphere
  • WhatsApp
  • Workday
  • Workday Extend
  • Workday Finance
  • Workday Financials
  • Workday Integration
  • Workday Integrations
  • Workday Payroll
  • Workday Recruiting
  • Workday Report Writer
  • Workday Reporting
  • Workday Security
  • Workday Studio
  • Youtube
  • Zapier
  • Zendesk
  • Zoom
  • ZoomInfo
  • n8n
  • nOps

Tools — Total: 258

  • 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 Cassandra
  • Apache Commons
  • Apache Cordova
  • Apache CouchDB
  • Apache Curator
  • Apache DB
  • Apache DolphinScheduler
  • Apache Drill
  • Apache Druid
  • Apache Flex
  • Apache Flink
  • Apache Flume
  • Apache FreeMarker
  • Apache Geode
  • Apache Gobblin
  • Apache Gora
  • Apache Groovy
  • Apache HBase
  • Apache Hadoop
  • Apache Hive
  • Apache Hop
  • Apache HttpComponents
  • Apache Hudi
  • Apache Iceberg
  • Apache Ignite
  • Apache Impala
  • Apache Ivy
  • Apache JMeter
  • Apache Jackrabbit
  • Apache James
  • Apache Jena
  • Apache Juneau
  • Apache Kafka
  • Apache Karaf
  • Apache Knox
  • Apache Kylin
  • Apache MINA
  • Apache Maven
  • Apache Mesos
  • Apache NiFi
  • Apache ORC
  • Apache Olingo
  • Apache OpenJPA
  • Apache OpenOffice
  • Apache OpenWebBeans
  • Apache OpenWhisk
  • Apache POI
  • Apache Parquet
  • Apache Phoenix
  • Apache Pig
  • Apache Pinot
  • Apache Pivot
  • Apache Portals
  • Apache Pulsar
  • Apache Qpid
  • Apache Ranger
  • Apache Ratis
  • Apache Roller
  • Apache Rya
  • Apache SINGA
  • Apache Serf
  • Apache ShenYu
  • Apache SkyWalking
  • Apache Sling
  • Apache Solr
  • 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 Tomcat
  • Apache Traffic Control
  • Apache Traffic Server
  • Apache Turbine
  • Apache VCL
  • Apache Velocity
  • Apache Web Services
  • Apache XML Graphics
  • Apache Zeppelin
  • Apache ZooKeeper
  • Appium
  • Argo
  • BFE
  • Backstage
  • Blender
  • Buildpacks
  • C#
  • C++
  • Capsule
  • Celery
  • Chef
  • Cilium
  • ClickHouse
  • Cloud Custodian
  • Consul
  • Containerd
  • Contour
  • Copa
  • Cortex
  • Crossplane
  • Cucumber
  • Debian
  • Dex
  • Django
  • Docker
  • Docker Swarm
  • Eclipse
  • Elastic Stack
  • Elasticsearch
  • Elk
  • Elk Stack
  • Envoy
  • Ethereum
  • Falco
  • FastAPI
  • Fluid
  • Flux
  • Git
  • Grafana
  • Hashicorp Vault
  • Helm
  • Hibernate
  • Hugging Face Transformers
  • Interlink
  • Istio
  • JUnit
  • Jaeger
  • Jenkins
  • Jest
  • Jupyter
  • K3s
  • KCL
  • KServe
  • Kafka Connect
  • Keycloak
  • Kibana
  • Kotlin
  • Kubeflow
  • Kubeflow Pipelines
  • Kubernetes
  • Kubernetes Operators
  • Kuma
  • Lean
  • Lightning Web Components
  • Lima
  • Linkerd
  • Linux
  • Litmus
  • Llama
  • Logstash
  • Matplotlib
  • Maven Central
  • Mockito
  • MongoDB
  • MySQL
  • NATS
  • Nexus
  • Nginx
  • Node.js
  • NumPy
  • ORAS
  • Open Policy Agent
  • OpenSearch
  • OpenStack
  • OpenTelemetry
  • OpenTofu
  • PHP
  • Packer
  • Pandas
  • Perl
  • Pixie
  • Playwright
  • Porter
  • PostgreSQL
  • PowerShell
  • Prometheus
  • Pulumi
  • Puppet
  • PySpark
  • PyTorch
  • Python
  • R
  • RabbitMQ
  • Radius
  • Ratify
  • React
  • React Native
  • Redis
  • Redux
  • Rook
  • SOPS
  • SPIRE
  • SVN
  • Scala
  • Score
  • Selenium
  • Semantic Kernel
  • Sonar
  • SonarQube
  • Spring
  • Spring Boot
  • Spring Boot Admin Console
  • Spring Cloud Stream
  • Spring Data
  • Spring Framework
  • Spring Security
  • Swift
  • Telepresence
  • TensorFlow
  • Terraform
  • Thanos
  • Ubuntu
  • Vault
  • Vineyard
  • Vite
  • Vitess
  • Vue.js
  • Wireshark
  • WordPress
  • YARN
  • Zabbix
  • Zot
  • bootc
  • cURL
  • eBPF
  • gRPC
  • jQuery
  • kpt
  • werf

Standards — Total: 242

  • ACID
  • AIS
  • AMQP
  • 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
  • CQRS
  • CSS
  • Capital Requirements
  • Certificate Enrolment Protocols
  • Circuit Breaker
  • Communication Protocols
  • Component Model
  • Configuration Language
  • Consensus
  • Containerfile
  • Convention Over Configuration
  • Cybersecurity Standards
  • DHCP
  • DNS
  • DSL
  • Data Flow Diagrams
  • Data Format
  • Data Modeling
  • Data Models
  • Data Privacy Standards
  • Data Quality Standards
  • Database Schema Design
  • Defense In Depth
  • Dependency Injection
  • Design Patterns
  • Design Standards
  • DevOps
  • DevSecOps
  • Development Methodology
  • Dimensional Modeling
  • Domain-Driven Design
  • Enterprise Integration Patterns
  • Entity Relationship
  • Equator Principles
  • Event Sourcing
  • Event-driven Architecture
  • Extreme Programming
  • FTP
  • File Format
  • FinOps
  • Financial Regulation
  • Flowcharts
  • Functional Programming
  • GDPR
  • Gherkin
  • GitOps
  • Good Manufacturing Practices
  • Graph Query Language (GQL)
  • GraphQL
  • Gremlin
  • HIPAA
  • HTML
  • HTML5
  • HTTP
  • HTTP/2
  • IAM
  • IMAP
  • ISO
  • IT Standards
  • ITIL
  • ITSM
  • Integration Patterns
  • Interface Specifications
  • Internal Control Standards
  • Inversion Of Control
  • JCR
  • JDBC
  • JMS
  • JPA
  • JSF
  • JSON
  • JSON Binding
  • Jakarta EE
  • Java EE
  • Kanban
  • Kerberos
  • LDAP
  • LICENSE.md
  • Lakehouse Architecture
  • Lean Management
  • Lean Manufacturing
  • Lean Operations
  • Lean Six Sigma
  • Lean Six Sigma Black Belt
  • MLOps
  • MVC
  • Mandatory Reserves Requirement
  • MapReduce
  • Markup Language
  • Messaging Protocol
  • Methodology
  • Mockups
  • Modeling Language
  • Monolithic Architecture
  • NFC
  • NIO
  • NIST
  • Network Protocols
  • Normalization
  • OAuth
  • OCI
  • OData
  • OIDC
  • OSGi
  • OSHA
  • OWASP
  • Object-Oriented Programming
  • OpenAPI
  • OpenID Connect
  • PCI Compliance
  • PDF
  • POSIX
  • Parquet
  • Partitioning
  • Privacy By Design
  • Process Flow Diagrams
  • Product Backlog
  • Product Backlog Items
  • Product Specifications
  • Programming Paradigm
  • Project Management Methodology
  • Protocol Buffers
  • Prototypes
  • Pub/Sub
  • QoS
  • Quality Of Service
  • Quality Standards
  • RACI
  • RBAC
  • RDF
  • RDP
  • README.md
  • REST
  • REST API
  • RESTful
  • RESTful APIs
  • RPC
  • Raft
  • Reactive Programming
  • Regular Expressions
  • Regulation
  • Regulatory
  • Relational Data Modeling
  • Runbooks
  • SAFe Agile
  • SAML
  • SCADA
  • SDLC
  • SECURITY.md
  • SFTP
  • SMTP
  • SOA
  • SOAP
  • SPA
  • SQL
  • SSH
  • SSL/TLS
  • SSO
  • SUPPORT.md
  • Scaled Agile
  • Schema Design
  • Schema Evolution
  • Schema Validation
  • Scrum
  • SecOps
  • Secure Software Development Life Cycle
  • Secure Software Development Lifecycle
  • Secure Tunneling Protocols
  • Secure-by-Default
  • Secure-by-Design
  • Security By Design
  • Security Protocols
  • Security Standards
  • Security Standards And Procedures
  • Service Oriented Architecture
  • Sharding
  • Six Sigma
  • Sketches
  • Software Design Architectural Patterns
  • Software Design Patterns
  • Software Development Life Cycle
  • Software Development Lifecycle
  • Software-Defined Networking
  • Specification
  • Standard Operating Procedures
  • Standardization
  • Standards
  • Swagger
  • TCP/IP
  • Table Format
  • Technical Specifications
  • Templates
  • Test Cases
  • Test First
  • Test Plans
  • Test Scripts
  • Test Specifications
  • Test Suites
  • Test-driven Development
  • UML
  • Use Cases
  • User Stories
  • VNC
  • VPN
  • WCAG
  • WSDL
  • Waterfall
  • Web Standards
  • WebSockets
  • Wireframes
  • Write Ahead Log
  • XML
  • XSLT
  • Zero Trust
  • Zero Trust Architecture
  • Zero Trust Network Access
  • Zero-Trust Security Model

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 →