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.
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
- AdobeA multinational software company known for its creative, document, and digital marketing solutions. Creator of...
- ADPA leading provider of human capital management solutions including payroll, benefits, and workforce management. Serves...
- AirtableA connected apps platform that combines the flexibility of a spreadsheet with the power of...
- Akamai TechnologiesAkamai Technologies is a major US corporation and Fortune 1000 company. The Akamai Technologies API...
- AlightAlight is a leading cloud-based human capital and technology services provider that powers confident health,...
- AlphabetThe parent company of Google and one of the world's most valuable corporations. Operates the...
- AmazonThe world's largest e-commerce and cloud computing company operating a vast online marketplace, Amazon Web...
- AppleThe world's most valuable technology company designing consumer electronics, software, and digital services. Creator of...
- AtlassianAn Australian enterprise software company providing collaboration and project management tools for software development teams....
- AutodeskAutodesk is a global leader in design, engineering, and entertainment software, providing cloud-connected platform APIs...
- AvalaraAvalara provides cloud-based tax compliance automation for businesses of every size, with services covering sales...
- BroadcomA global technology company designing, developing, and supplying semiconductor and infrastructure software solutions. A leader...
- CACI InternationalCACI International provides information technology, professional services, and managed solutions to U.S. federal government agencies...
- Cadence Design SystemsCadence Design Systems is a multinational electronic design automation (EDA) software and hardware company. Cadence...
- CDWCDW is a leading multi-brand provider of information technology solutions to business, government, education, and...
- CienaCiena Corporation is a global networking equipment, software, and services vendor focused on optical and...
- CiscoA multinational technology company and the global leader in networking equipment and telecommunications technology. Provides...
- Cisco SystemsCisco Systems is a global technology company providing networking, security, collaboration, and cloud infrastructure products....
- Cognizant Technology SolutionsCognizant Technology Solutions is a multinational information technology services and consulting company that provides digital,...
- Dell TechnologiesA multinational technology company providing personal computers, servers, storage, and cloud infrastructure solutions. A leading...
- Diebold NixdorfDiebold Nixdorf is a global leader in driving connected commerce for the financial and retail...
- DocusignDocuSign helps organizations connect and automate how they prepare, sign, act on, and manage agreements....
- DropboxDropbox is a file hosting service operated by the American company Dropbox, Inc., headquartered in...
- DXC TechnologyDXC Technology is a global IT services company that helps clients harness the power of...
- EncoreEncore is an open source development platform for building type-safe, production-ready backend applications and distributed...
- EquinixEquinix is a global digital infrastructure company that provides interconnection and data center services to...
- F5F5 is a global company that specializes in application delivery and security solutions for businesses....
- GraviteeAn open-source API management platform offering full lifecycle management for REST, async, event-driven, and AI/agentic...
- GustoA cloud-based payroll, benefits, and human resources platform designed for small and medium-sized businesses. Simplifies...
- Hewlett Packard EnterpriseHewlett Packard Enterprise is a global edge-to-cloud company that provides solutions including servers, storage, networking,...
- HubSpotAn inbound marketing, sales, customer service, and operations software platform offering a unified CRM with...
- IBMA multinational technology and consulting corporation providing cloud computing, artificial intelligence, and enterprise software solutions....
- Insight EnterprisesInsight Enterprises is a global Fortune 500 solutions integrator helping organizations transform technology, operations, and...
- IntuitA financial software company providing tax preparation, accounting, and personal finance solutions. Creator of TurboTax,...
- JMSJava Message Service (JMS), now known as Jakarta Messaging, is a Java API that allows...
- Kyndryl HoldingsFortune 1000 company Kyndryl Holdings. Public API documentation has not yet been catalogued in the...
- LeidosLeidos, a Fortune 500 digital and mission innovator, delivers solutions at the intersection of national...
- MetaA technology conglomerate formerly known as Facebook, operating the world's largest social media platforms including...
- MicrosoftOne of the world's most valuable technology companies producing software, cloud services, and hardware. Creator...
- NCRNCR Corporation separated in October 2023 into two independent public companies: NCR Voyix, a global...
- NetAppCollection of NetApp APIs for cloud data services, storage management, and infrastructure.
- OktaAn identity and access management platform providing workforce identity (Workforce Identity Cloud) and customer identity...
- OracleA multinational technology corporation and one of the world's largest enterprise software companies. Provides cloud...
- Palo Alto NetworksPalo Alto Networks is a global cybersecurity leader providing advanced security platforms and services across...
- PandiumAn embedded integration platform-as-a-service (iPaaS) that enables B2B SaaS companies to build, launch, and manage...
- Rackspace TechnologyRackspace Technology is a multicloud solutions provider offering managed services, professional services, and consulting across...
- RadiusApplication platform for cloud-native applications that enables developers to define, deploy, and manage applications across...
- Roper TechnologiesRoper Technologies is a diversified technology holding company (NASDAQ: ROP) that acquires, manages, and develops...
- SalesforceThe world's leading customer relationship management platform and a pioneer of cloud-based enterprise software. Provides...
- SAPA 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...
- ServiceNowA cloud computing company providing digital workflow automation for enterprise IT service management and business...
- SlackA channel-based messaging and collaboration platform offering real-time chat, file sharing, search, third-party app integrations,...
- SnowflakeA cloud-based data warehousing and analytics company enabling organizations to store, process, and analyze massive...
- SnykA developer-first security platform for finding and fixing vulnerabilities in code, open-source dependencies, container images,...
- SPIRESPIRE (SPIFFE Runtime Environment) is the reference implementation of the SPIFFE standard, providing a toolchain...
- SS AND C TechnologiesFortune 1000 company SS AND C Technologies. Public API documentation has not yet been catalogued...
- SynopsysSynopsys is a global leader in semiconductor design EDA tools and software security testing. The...
- TD SYNNEXTD SYNNEX is one of the world's largest IT distributors and solutions aggregators, serving over...
- ToastToast is a restaurant technology platform providing cloud-based point-of-sale, payment processing, and business management tools...
- UpboundUpbound is a universal cloud platform built on Crossplane, providing managed control planes and a...
- WorkdayA leading enterprise cloud software company providing financial management, human capital management, and planning solutions....
- WSO2An open-source technology provider offering enterprise solutions for API management, integration, and identity and access...
- XeroxXerox is a global technology company and document management leader providing printing, digital document management,...
- Zoho CorporationA privately held global software company offering more than 55 integrated business applications including CRM,...
- ZoomA communications technology company providing video conferencing, online meetings, chat, and collaboration tools. Became essential...
- ZscalerA 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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Score Breakdown — Total: 23825
Each row links to its full definition on the Naftiko Signal Groups page.
271 77 104 1079 983 416 782 490 377 1749 510 627 1216 264 471 630 192 254 99 544 992 649 144 401 1811 3482 641 343 136 277 226 26 272 363 735 165 284 73 159 241 350Areas — 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 Ads
- FactSet
- Fern
- Figma
- Fortify
- Fortinet
- Fusio
- G2
- GCP Cloud Storage
- Gainsight
- Gemini
- GitHub
- GitHub Actions
- GitHub Copilot
- GitLab
- Gmail
- Gong
- 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
- 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
- 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
- Tyk
- Unity
- Unix
- VMware
- Vantage
- Vendr
- Vercel
- Veritas Cluster
- Veritas InfoScale
- Veritas NetBackup
- Veritas Volume Manager
- Vessel
- Visio
- Visualforce
- WebLogic
- WebSphere
- 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
- 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.
Where you stand
See your signals
The leads, the gaps, and where AI has shifted the gradient — in numbers from public data, not vendor decks.
See full report →What to build
Translate to capabilities
Capabilities being built across the peer set — tied to the markets you actually serve.
View capabilities →Where to go next
Navigate the next move
A prioritized roadmap grounded in signal data. Not a generic best-practices deck, not a vendor-shaped pitch.
Get your navigation →Control what you build
Integrate with AI
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 →